<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  <meta name="renderer" content="webkit">
  <meta http-equiv="X-UA-Compatible" content="IE=edge" >
  <link rel="dns-prefetch" href="http://example.com">
  <title>Hexo</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta name="description" content="为什么会有这个网站  [!TIP] 本站取名 r2coding，即 Road To Coding，意为「编程自学之路」，是自学编程以来所用资源和分享内容的大聚合。  旨在为编程自学者提供一系列：  清晰的编程自学路线 各编程岗位方向的知识点梳理 靠谱的资源 高效的工具 务实的技术文章  方便自己也方便他人">
<meta property="og:type" content="article">
<meta property="og:title" content="Hexo">
<meta property="og:url" content="http://example.com/2022/04/05/README/index.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:description" content="为什么会有这个网站  [!TIP] 本站取名 r2coding，即 Road To Coding，意为「编程自学之路」，是自学编程以来所用资源和分享内容的大聚合。  旨在为编程自学者提供一系列：  清晰的编程自学路线 各编程岗位方向的知识点梳理 靠谱的资源 高效的工具 务实的技术文章  方便自己也方便他人">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/r2coding_logo_index.15y992dieibg.png">
<meta property="og:image" content="https://img.shields.io/badge/Github-r2coding-red.svg">
<meta property="og:image" content="https://img.shields.io/badge/Gitee-r2coding-blue.svg">
<meta property="og:image" content="https://img.shields.io/badge/bilibili-哔哩哔哩-critical">
<meta property="og:image" content="https://img.shields.io/badge/微信联系作者-WeChat-green.svg">
<meta property="og:image" content="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/contentmap.3sdmma4od740.png">
<meta property="og:image" content="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/localsoftware.2x9vakmja2g.png">
<meta property="og:image" content="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/linuxos.qciprfz30dc.png">
<meta property="og:image" content="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/gcm.1sv6s8asfzc0.jpeg">
<meta property="og:image" content="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/ide.720nw0czwbs0.png">
<meta property="og:image" content="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/apidocs.2qlxsrvx2vy0.png">
<meta property="og:image" content="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/ci.3iokn4xypxy0.png">
<meta property="og:image" content="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/bookref.32p5e3kiqri0.jpg">
<meta property="og:image" content="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/rescollection.2twl61h5k0s0.jpeg">
<meta property="og:image" content="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/qrcode_for_gh_1537917051d0_258.nd3fymuhyts.jpeg">
<meta property="article:published_time" content="2022-04-05T04:59:00.778Z">
<meta property="article:modified_time" content="2022-01-20T18:23:56.000Z">
<meta property="article:author" content="John Doe">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/r2coding_logo_index.15y992dieibg.png">
  
    <link rel="alternative" href="/atom.xml" title="Hexo" type="application/atom+xml">
  
  
    <link rel="icon" href="/assets/img/favicon.ico">
  
  <link rel="stylesheet" type="text/css" href="/./main.0cf68a.css">
  <style type="text/css">
  
    #container.show {
      background: linear-gradient(200deg,#a0cfe4,#e8c37e);
    }
  </style>
  

  
<script>
var _hmt = _hmt || [];
(function() {
	var hm = document.createElement("script");
	hm.src = "https://hm.baidu.com/hm.js?a30844fa2bcbce0a9e001fe06cefeddf";
	var s = document.getElementsByTagName("script")[0]; 
	s.parentNode.insertBefore(hm, s);
})();
</script>


<meta name="generator" content="Hexo 6.0.0"></head>

<body>
  <div id="container" q-class="show:isCtnShow">
    <canvas id="anm-canvas" class="anm-canvas"></canvas>
    <div class="left-col" q-class="show:isShow">
      
<div class="overlay" style="background: #4d4d4d"></div>
<div class="intrude-less">
	<header id="header" class="inner">
		<a href="" class="profilepic">
			<img src="/assets/me.jpg" class="js-avatar">
		</a>
		<hgroup>
		  <h1 class="header-author"><a href=""></a></h1>
		</hgroup>
		

		<nav class="header-menu">
			<ul>
			
				<li><a href="/">个人简介：视觉激光SLAM混血</a></li>
	        
				<li><a href="/">主页</a></li>
	        
				<li><a href="/">项目</a></li>
	        
				<li><a href="/">分类</a></li>
	        
			</ul>
		</nav>
		<nav class="header-smart-menu">
    		
    			
    			<a q-on="click: openSlider(e, 'innerArchive')" href="javascript:void(0)">所有文章</a>
    			
            
    			
            
    			
    			<a q-on="click: openSlider(e, 'aboutme')" href="javascript:void(0)">关于我</a>
    			
            
		</nav>
		<nav class="header-nav">
			<div class="social">
				
					<a class="github" target="_blank" href="https://github.com/haohaoalt" title="github"><i class="icon-github"></i></a>
		        
					<a class="zhihu" target="_blank" href="https://www.zhihu.com/people/alt-55-93" title="zhihu"><i class="icon-zhihu"></i></a>
		        
					<a class="bilibili" target="_blank" href="https://space.bilibili.com/327806106/" title="bilibili"><i class="icon-bilibili"></i></a>
		        
					<a class="gitee" target="_blank" href="https://gitee.com/haohaoalt" title="gitee"><i class="icon-gitee"></i></a>
		        
					<a class="csdn" target="_blank" href="https://blog.csdn.net/qq_45036714?type=blog" title="csdn"><i class="icon-csdn"></i></a>
		        
			</div>
		</nav>
	</header>		
</div>

    </div>
    <div class="mid-col" q-class="show:isShow,hide:isShow|isFalse">
      
<nav id="mobile-nav">
  	<div class="overlay js-overlay" style="background: #4d4d4d"></div>
	<div class="btnctn js-mobile-btnctn">
  		<div class="slider-trigger list" q-on="click: openSlider(e)"><i class="icon icon-sort"></i></div>
	</div>
	<div class="intrude-less">
		<header id="header" class="inner">
			<div class="profilepic">
				<img src="/assets/me.jpg" class="js-avatar">
			</div>
			<hgroup>
			  <h1 class="header-author js-header-author"></h1>
			</hgroup>
			
			
			
				
			
				
			
				
			
				
			
			
			
			<nav class="header-nav">
				<div class="social">
					
						<a class="github" target="_blank" href="https://github.com/haohaoalt" title="github"><i class="icon-github"></i></a>
			        
						<a class="zhihu" target="_blank" href="https://www.zhihu.com/people/alt-55-93" title="zhihu"><i class="icon-zhihu"></i></a>
			        
						<a class="bilibili" target="_blank" href="https://space.bilibili.com/327806106/" title="bilibili"><i class="icon-bilibili"></i></a>
			        
						<a class="gitee" target="_blank" href="https://gitee.com/haohaoalt" title="gitee"><i class="icon-gitee"></i></a>
			        
						<a class="csdn" target="_blank" href="https://blog.csdn.net/qq_45036714?type=blog" title="csdn"><i class="icon-csdn"></i></a>
			        
				</div>
			</nav>

			<nav class="header-menu js-header-menu">
				<ul style="width: 70%">
				
				
					<li style="width: 25%"><a href="/">个人简介：视觉激光SLAM混血</a></li>
		        
					<li style="width: 25%"><a href="/">主页</a></li>
		        
					<li style="width: 25%"><a href="/">项目</a></li>
		        
					<li style="width: 25%"><a href="/">分类</a></li>
		        
				</ul>
			</nav>
		</header>				
	</div>
	<div class="mobile-mask" style="display:none" q-show="isShow"></div>
</nav>

      <div id="wrapper" class="body-wrap">
        <div class="menu-l">
          <div class="canvas-wrap">
            <canvas data-colors="#eaeaea" data-sectionHeight="100" data-contentId="js-content" id="myCanvas1" class="anm-canvas"></canvas>
          </div>
          <div id="js-content" class="content-ll">
            <article id="post-README" class="article article-type-post " itemscope itemprop="blogPost">
  <div class="article-inner">
    
    <div class="article-entry" itemprop="articleBody">
      
        <p align="center">
    <a href="https://www.r2coding.com/" target="_blank">
        <img src="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/r2coding_logo_index.15y992dieibg.png" width=""/>
    </a>
</p>


<p align="center">
  <a href="https://github.com/rd2coding/Road2Coding" target="_blank"><img src="https://img.shields.io/badge/Github-r2coding-red.svg"></a>
  <a href="https://gitee.com/rd2coding/Road2Coding" target="_blank"><img src="https://img.shields.io/badge/Gitee-r2coding-blue.svg"></a>
  <a href="https://space.bilibili.com/384068749" target="_blank"><img src="https://img.shields.io/badge/bilibili-哔哩哔哩-critical"></a>
  <a href="https://mp.weixin.qq.com/s/ePhaYezFblgt0NgbvtWqww" target="_blank">
    <img src="https://img.shields.io/badge/微信联系作者-WeChat-green.svg" alt="微信联系">
  </a>
</p>

<hr>
<h1 id="为什么会有这个网站"><a href="#为什么会有这个网站" class="headerlink" title="为什么会有这个网站"></a><strong>为什么会有这个网站</strong></h1><hr>
<blockquote>
<p>[!TIP]<br> 本站取名 <strong>r2coding</strong>，即 <strong>Road To Coding</strong>，意为「编程自学之路」，是自学编程以来所用资源和分享内容的大聚合。</p>
<p> 旨在为编程自学者提供一系列：</p>
<ul>
<li><strong>清晰的编程自学路线</strong></li>
<li><strong>各编程岗位方向的知识点梳理</strong></li>
<li><strong>靠谱的资源</strong></li>
<li><strong>高效的工具</strong></li>
<li><strong>务实的技术文章</strong></li>
</ul>
<p>方便自己也方便他人。网站内容会保持<strong>持续更新</strong>，欢迎收藏品鉴！</p>
</blockquote>
<hr>
<h1 id="本站内容地图"><a href="#本站内容地图" class="headerlink" title="本站内容地图"></a><strong>本站内容地图</strong></h1><hr>
<p><img src="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/contentmap.3sdmma4od740.png"></p>
<hr>
<h1 id="编程自学路线-知识大梳理"><a href="#编程自学路线-知识大梳理" class="headerlink" title="编程自学路线+知识大梳理"></a><strong>编程自学路线+知识大梳理</strong></h1><hr>
<blockquote>
<p>[!NOTE]<br> 本站目前整理收录了6个大方向（岗位）的学习路线+知识点大梳理，分别为：</p>
<ul>
<li><strong>Java后端开发</strong></li>
<li><strong>前端开发</strong></li>
<li><strong>C&#x2F;C++后台开发</strong></li>
<li><strong>大数据开发</strong></li>
<li><strong>嵌入式开发</strong></li>
<li><strong>网络安全方向</strong></li>
</ul>
</blockquote>
<p>后续本站也会持续更新和增加更多方向岗位的学习路线…</p>
<hr>
<!-- tabs:start -->

<h3 id="Java后端开发"><a href="#Java后端开发" class="headerlink" title="Java后端开发"></a><strong>Java后端开发</strong></h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://static.r2coding.com/r2_static/pdf/jawa.pdf</span><br></pre></td></tr></table></figure>

<blockquote>
<p>[!TIP]<br> 详情链接 <strong>→</strong> <a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/rAoamIey7cARMES7kfIaLw">《Java后端开发学习路线+知识点大梳理》</a></p>
</blockquote>
<h3 id="前端开发"><a href="#前端开发" class="headerlink" title="前端开发"></a><strong>前端开发</strong></h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://static.r2coding.com/r2_static/pdf/front.pdf</span><br></pre></td></tr></table></figure>

<blockquote>
<p>[!TIP]<br> 详情链接 <strong>→</strong> <a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/_8lvpPDArM_Z-MI9iul1AA">《前端开发学习路线+知识点大梳理》</a></p>
</blockquote>
<h3 id="大数据开发"><a href="#大数据开发" class="headerlink" title="大数据开发"></a><strong>大数据开发</strong></h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://static.r2coding.com/r2_static/pdf/bigdata.pdf</span><br></pre></td></tr></table></figure>

<blockquote>
<p>[!TIP]<br> 详情链接 <strong>→</strong> <a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/dm2Qm4zZhHxEvcFgNS_mrA">《大数据开发学习路线+知识点大梳理》</a></p>
</blockquote>
<h3 id="嵌入式开发"><a href="#嵌入式开发" class="headerlink" title="嵌入式开发"></a><strong>嵌入式开发</strong></h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://static.r2coding.com/r2_static/pdf/embed.pdf</span><br></pre></td></tr></table></figure>

<blockquote>
<p>[!TIP]<br> 详情链接 <strong>→</strong> <a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/AJqbhz3InV3G8TVjTHn6dg">《嵌入式开发学习路线+知识点大梳理》</a></p>
</blockquote>
<h3 id="C-x2F-C-后台开发"><a href="#C-x2F-C-后台开发" class="headerlink" title="C&#x2F;C++后台开发"></a><strong>C&#x2F;C++后台开发</strong></h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://static.r2coding.com/r2_static/pdf/c.pdf</span><br></pre></td></tr></table></figure>

<h3 id="网络安全方向"><a href="#网络安全方向" class="headerlink" title="网络安全方向"></a><strong>网络安全方向</strong></h3><blockquote>
<p>[!TIP]<br> 详情链接 <strong>→</strong> <a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/pPs5Gm9I3a6-nMZQ42kaWg">《网络安全方向学习路线+知识点大梳理》</a></p>
</blockquote>
<!-- tabs:end -->

<hr>
<h1 id="常用编程软件和工具"><a href="#常用编程软件和工具" class="headerlink" title="常用编程软件和工具"></a><strong>常用编程软件和工具</strong></h1><hr>
<blockquote>
<p>[!NOTE]</p>
<ul>
<li><p><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/YNOZSQ5smo1uGE5ZttUZ_w"><strong>【置顶笔记下载1】熬10天夜，我肝出了这个PDF版「服务器软件安装手册」</strong></a></p>
</li>
<li><p><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/JUJ6qu_ec3s1JmTxQt_V3g"><strong>【置顶笔记下载2】再肝两夜，写了个「服务器项目部署」实战PDF手册</strong></a></p>
</li>
</ul>
</blockquote>
<blockquote>
<p><strong>工欲善其事，必先利其器！</strong></p>
</blockquote>
<p>一个易上手、好用、高效的软件工具对于程序员工作效率的提升是不言而喻的，这些常用开发软件和工具比如：</p>
<blockquote>
<ul>
<li>基础的软件开发环境和设施</li>
<li>好用高效的在线工具和网站</li>
<li>本地常用的一些编程软件</li>
<li>Linux操作系统</li>
<li>版本控制工具</li>
<li>高效的IDE和编辑器</li>
<li>API管理工具&#x2F;文档管理工具</li>
<li>CI守护系统</li>
<li>…… 等等</li>
</ul>
</blockquote>
<p>接下来我们一项一项详细盘点。</p>
<hr>
<h2 id="常用在线工具集"><a href="#常用在线工具集" class="headerlink" title="常用在线工具集"></a>常用在线工具集</h2><hr>
<blockquote>
<p>[!NOTE]</p>
<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/XUHnLCbq7mDWhOc9imTVzg"><strong>【本章节置顶资源下载】自学编程一路走来，这些私藏工具和网站我全贡献出来了！（附我的浏览器书签下载）</strong></a></li>
</ul>
</blockquote>
<p>程序员在平时的日常<strong>工作</strong>、<strong>学习</strong>、<strong>开发</strong>、<strong>做笔记</strong>、<strong>写博客</strong>等过程中还是有很多好用并且高效的<strong>在线工具推荐</strong>的，毕竟我们不是每时每刻我们都需要那种很重量级的本地软件。下面将分成<strong>16个大类</strong>，共整理了约<strong>130+个</strong>常用的在线工具和网站供大家食用。</p>
<hr>
<!-- tabs:start -->

<h4 id="在线画图工具"><a href="#在线画图工具" class="headerlink" title="在线画图工具"></a><strong>在线画图工具</strong></h4><p>程序员经常接触的无非也就是流程图、思维导图、原型图、UML图、网络拓扑图、组织结构图等等这些。下面这四个在线画图网站我想应该足够了，其中那个processon是我用得最多的，历史文章中几乎所有相关的图形都是用它绘制，然后导出图片的。</p>
<ul>
<li><a target="_blank" rel="noopener" href="https://www.processon.com/"><strong>在线画图工具ProcessOn</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://app.diagrams.net/"><strong>在线画图工具Draw.io</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.mindline.cn/webapp"><strong>在线思维导图工具MindLine</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://haha98k.com/"><strong>PlantUML在线编辑器</strong></a></li>
</ul>
<h4 id="在线编解码工具"><a href="#在线编解码工具" class="headerlink" title="在线编解码工具"></a><strong>在线编解码工具</strong></h4><ul>
<li><a target="_blank" rel="noopener" href="https://base64.supfree.net/"><strong>BASE64编解码工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.zxgj.cn/g/md5"><strong>MD5编码工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.fly63.com/tool/cipher/"><strong>AES&#x2F;DES加解密</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://jwt.calebb.net/"><strong>JWT解码工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.matools.com/code-convert-ascii"><strong>ASCII编解码工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.zxgj.cn/g/unicode"><strong>Unicode编解码工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.zxgj.cn/g/utf8"><strong>UTF-8编解码工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.zxgj.cn/g/enstring"><strong>字符串编解码工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://tool.chinaz.com/tools/urlencode.aspx?jdfwkey=lbixz1"><strong>URL编解码工具</strong></a></li>
</ul>
<h4 id="在线转换工具"><a href="#在线转换工具" class="headerlink" title="在线转换工具"></a><strong>在线转换工具</strong></h4><ul>
<li><a target="_blank" rel="noopener" href="http://www.fly63.com/tool/ascii/"><strong>在线ASCII码对照表</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.zxgj.cn/g/jinzhi"><strong>通用进制转换工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.binaryconvert.com/"><strong>在线浮点数十进制转换</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.zxgj.cn/g/yansezhi"><strong>RGB颜色转换</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.zxgj.cn/g/unix"><strong>时间戳转换工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.fly63.com/tool/unitable/"><strong>计量单位换算工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.json.cn/"><strong>在线JSON解析</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://prettier.io/playground/"><strong>在线JS代码格式化工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.zxgj.cn/g/sqlformat"><strong>SQL压缩&#x2F;格式化工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.zxgj.cn/g/jsonxml"><strong>JSON和XML在线转换</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.fly63.com/tool/jsonyaml/"><strong>JSON&#x2F;YAML在线转换</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.fly63.com/tool/renmingbi/"><strong>人民币大小写转换工具</strong></a></li>
</ul>
<h4 id="正则表达式工具"><a href="#正则表达式工具" class="headerlink" title="正则表达式工具"></a><strong>正则表达式工具</strong></h4><ul>
<li><a target="_blank" rel="noopener" href="https://regexr.com/"><strong>正则表达式调试工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://jex.im/regulex/"><strong>正则表达式可视化工具</strong></a></li>
</ul>
<h4 id="网络工具"><a href="#网络工具" class="headerlink" title="网络工具"></a><strong>网络工具</strong></h4><ul>
<li><a target="_blank" rel="noopener" href="https://www.ip138.com/"><strong>IP地址归属地查询</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.ipip.net/ip.html"><strong>IP地址查询</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.fly63.com/php/http/"><strong>HTTP在线接口测试工具</strong></a></li>
</ul>
<h4 id="在线编译运行工具"><a href="#在线编译运行工具" class="headerlink" title="在线编译运行工具"></a><strong>在线编译运行工具</strong></h4><ul>
<li><a target="_blank" rel="noopener" href="https://rextester.com/"><strong>C#在线编译运行</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.onlinegdb.com/"><strong>C&#x2F;C++在线编译调试</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://c.runoob.com/"><strong>在线编译工具套装</strong></a></li>
</ul>
<h4 id="可视化-x2F-格式化工具"><a href="#可视化-x2F-格式化工具" class="headerlink" title="可视化&#x2F;格式化工具"></a><strong>可视化&#x2F;格式化工具</strong></h4><ul>
<li><a target="_blank" rel="noopener" href="https://codepen.io/"><strong>在线前端编辑器</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://flourish.studio/"><strong>在线数据可视化</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.json.cn/"><strong>在线JSON解析</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://enjoycss.com/"><strong>在线CSS代码可视化工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.zxgj.cn/g/xmlformat"><strong>XML格式化工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://prettier.io/playground/"><strong>在线JS代码格式化工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.zxgj.cn/g/sqlformat"><strong>SQL压缩&#x2F;格式化工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.zxgj.cn/g/jsonxml"><strong>JSON和XML在线转换</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.fly63.com/tool/jsonyaml/"><strong>JSON&#x2F;YAML在线转换</strong></a></li>
</ul>
<h4 id="在线生成器"><a href="#在线生成器" class="headerlink" title="在线生成器"></a><strong>在线生成器</strong></h4><ul>
<li><a target="_blank" rel="noopener" href="https://www.zxgj.cn/g/uuid"><strong>UUID在线生成器</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.zxgj.cn/g/suijishu"><strong>随机数生成器</strong></a></li>
</ul>
<h4 id="其他常用在线开发相关工具"><a href="#其他常用在线开发相关工具" class="headerlink" title="其他常用在线开发相关工具"></a><strong>其他常用在线开发相关工具</strong></h4><ul>
<li><a target="_blank" rel="noopener" href="https://nginxconfig.io/"><strong>在线Nginx配置工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.fly63.com/tool/textdiff/"><strong>在线文本代码比对工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.crx4chrome.com/"><strong>在线Chrome浏览器插件</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.docway.net/"><strong>在线接口文档管理工具</strong></a></li>
</ul>
<h4 id="在线素材工具"><a href="#在线素材工具" class="headerlink" title="在线素材工具"></a><strong>在线素材工具</strong></h4><blockquote>
<ul>
<li>如果你也写文章，或者做视频，那就一定少不了要找素材，包括各种图片、背景、emoji表情、表情包、壁纸、视频、gif图等等。</li>
<li>如此一来，那些好用的在线素材工具就必不可少了，比如像各种表情包工具、icon图标库、矢量图库、图片素材库、壁纸库等等。</li>
</ul>
</blockquote>
<ul>
<li><a target="_blank" rel="noopener" href="http://pngimg.com/"><strong>免费透明背景图片素材</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://emojiisland.com/"><strong>Emoji表情包下载</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://feathericons.com/"><strong>open source icons</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.iconfont.cn/"><strong>阿里巴巴矢量图标库</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://fabiaoqing.com/"><strong>表情包在线网站</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://pluspng.com/"><strong>免费PNG图片库</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.iconfinder.com/"><strong>ICON图标在线下载</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://bz.zzzmh.cn/"><strong>极简壁纸</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://wall.alphacoders.com/"><strong>Wallpaper Abyss壁纸</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://pixabay.com/zh/"><strong>Pixabay图片素材库</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://unsplash.com/"><strong>Unsplash图片素材库</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.pexels.com/"><strong>Pexels图片素材库</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://images.nasa.gov/"><strong>NASA图片视频素材库</strong></a></li>
</ul>
<h4 id="设计制作类工具"><a href="#设计制作类工具" class="headerlink" title="设计制作类工具"></a><strong>设计制作类工具</strong></h4><blockquote>
<ul>
<li>对于那些文章创作者和视频创作者而言，设计封面，做海报，设计LOGO，图片美化等等基本也是刚需。</li>
<li>这样大概率日常会用到一些简易好上手的在线设计制作类工具，比如在线P图、音&#x2F;视频轻量化剪辑、logo制作、海报设计制作、图片美化、在线图片转换或生成等等，毕竟不是每时每刻我们都需要那种重量级的本地软件。</li>
</ul>
</blockquote>
<ul>
<li><a target="_blank" rel="noopener" href="https://www.uupoop.com/"><strong>在线PS</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.weixinsyt.com/"><strong>在线音频剪辑</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.kapwing.com/"><strong>在线视频剪辑</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.uugai.com/"><strong>免费logo在线制作</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.qt86.com/"><strong>艺术字体在线生成</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://tableconvert.com/"><strong>在线表格转换工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.designcap.com/"><strong>在线海报设计工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://bigjpg.com/"><strong>图片智能放大工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://mh.cli.im/"><strong>二维码美化器</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://carbon.now.sh/"><strong>在线代码截图工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.remove.bg/zh"><strong>在线抠图工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.fly63.com/php/ico/"><strong>ICO图标在线生成</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.fly63.com/tool/svg2img/"><strong>SVG转PNG工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.fly63.com/tool/giftxt/"><strong>视频转GIF工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.fly63.com/tool/ewm/"><strong>二维码在线生成器</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.fly63.com/php/decoder/"><strong>二维码在线解码</strong></a></li>
</ul>
<h4 id="写作辅助工具"><a href="#写作辅助工具" class="headerlink" title="写作辅助工具"></a><strong>写作辅助工具</strong></h4><blockquote>
<ul>
<li>在我写文章的过程中经常会用到和写作相关的辅助工具，比方说：字数统计工具、Markdown格式的文章排版工具、图床网站、代码截图工具等等，所以下面这些在线工具就能很好地满足我的需求。</li>
</ul>
</blockquote>
<ul>
<li><a target="_blank" rel="noopener" href="https://www.eteste.com/"><strong>在线字数统计</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://mdnice.com/"><strong>mdnice markdown排版工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://md.aclickall.com/"><strong>md2all markdown排版工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://picx.xpoet.cn/"><strong>在线图床神器</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://sm.ms/"><strong>在线免费图床</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://imgkr.com/"><strong>图壳图床</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://carbon.now.sh/"><strong>在线代码截图工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://urlify.cn/"><strong>在线短链接工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.fly63.com/tool/textreplace/"><strong>在线文本替换</strong></a></li>
</ul>
<h4 id="在线办公工具"><a href="#在线办公工具" class="headerlink" title="在线办公工具"></a><strong>在线办公工具</strong></h4><blockquote>
<ul>
<li>这部分在线工具主要用来处理一些和文档以及文稿相关的事情，经常用到的比如：在线的全套pdf处理和转换工具、各种各样多媒体文件间的相互转换工具、在线识别工具、在线压缩工具等等。</li>
</ul>
</blockquote>
<ul>
<li><a target="_blank" rel="noopener" href="https://smallpdf.com/cn/pdf-tools"><strong>pdf在线处理工具套装1</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://tools.pdf24.org/zh/"><strong>pdf在线处理工具套装2</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.pdftoword.com/"><strong>pdf转word在线工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://cn.office-converter.com/"><strong>在线多媒体转换器合集</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://ocr.wdku.net/"><strong>在线文字识别工具</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://docsmall.com/"><strong>在线文件压缩工具</strong></a></li>
</ul>
<h4 id="文档笔记工具"><a href="#文档笔记工具" class="headerlink" title="文档笔记工具"></a><strong>文档笔记工具</strong></h4><blockquote>
<ul>
<li>好记性不如烂笔头，作为一个学习者，我觉得记笔记是必不可少的步骤。当然现在基本都做电子笔记和电子文档比较多。</li>
<li>现如今各式各样优秀的文档工具和笔记软件鳞次栉比，好用的也有很多，整理成如下列表，这东西各有长处，使用哪个最合意还得看个人习惯和需求了。</li>
</ul>
</blockquote>
<ul>
<li><a target="_blank" rel="noopener" href="https://www.yinxiang.com/"><strong>印象笔记</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://note.youdao.com/"><strong>有道笔记</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.onenote.com/"><strong>OneNote</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://mubu.com/"><strong>幕布</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.wiz.cn/"><strong>为知笔记</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://shimo.im/"><strong>石墨文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://simplenote.com/"><strong>Simplenote</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.yuque.com/"><strong>语雀</strong></a></li>
</ul>
<h4 id="编程学习网"><a href="#编程学习网" class="headerlink" title="编程学习网"></a><strong>编程学习网</strong></h4><ul>
<li><a target="_blank" rel="noopener" href="https://www.bilibili.com/"><strong>哔哩哔哩</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.dotcpp.com/"><strong>C语言网</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://zh.cppreference.com/"><strong>cppreference</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.icourse163.org/"><strong>中国大学MOOC</strong></a></li>
<li><a href="www.nowcoder.com"><strong>牛客网</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://open.163.com/"><strong>网易公开课</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://codegym.cc/"><strong>CodeGym</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://beginnersbook.com/"><strong>BeginnersBook</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://www.javased.com/"><strong>JavaSED</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.codecademy.com/"><strong>codecademy</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.coursera.org/"><strong>Coursera</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://stackoverflow.com/"><strong>StackOverFlow</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://leetcode-cn.com/"><strong>LeetCode</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.lintcode.com/"><strong>LintCode</strong></a></li>
</ul>
<h4 id="在线教程和文档"><a href="#在线教程和文档" class="headerlink" title="在线教程和文档"></a><strong>在线教程和文档</strong></h4><blockquote>
<ul>
<li>这部分主要集中了我在做开发过程中随手参考所要用到的几乎所有在线教程和官方文档，有中文版文档的我基本都优先列出来了，但更多时候是英文的官方文档。</li>
</ul>
</blockquote>
<!-- panels:start -->

<!-- div:left-panel -->

<ul>
<li><a target="_blank" rel="noopener" href="https://git-scm.com/book/zh/v2"><strong>Git中文教程</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://svnbook.red-bean.com/nightly/zh/index.html"><strong>SVN中文手册</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://jquery.cuishifeng.cn/"><strong>jQuery API中文文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.nginx.cn/doc/index.html"><strong>Nginx中文文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://kafka.apachecn.org/"><strong>Kafka中文文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://mybatis.org/mybatis-3/zh/index.html"><strong>Mybatis中文文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://developers.weixin.qq.com/miniprogram/dev/framework/"><strong>微信小程序官方文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://nodejs.cn/learn"><strong>Nodejs中文教程文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://httpd.apache.org/docs/"><strong>Apache Web Server文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.springcloud.cc/spring-reference.html"><strong>Spring文档中文版</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://studygolang.com/pkgdoc"><strong>Golang标准库文档中文版</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://docs.oracle.com/javase/8/docs/api/index.html"><strong>Java 8官方文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://maven.apache.org/guides/"><strong>Maven官方文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://tomcat.apache.org/tomcat-8.0-doc/index.html"><strong>Tomcat 8官方文档</strong></a></li>
</ul>
<!-- div:right-panel -->

<ul>
<li><a target="_blank" rel="noopener" href="https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/"><strong>Spring Boot官方文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.rabbitmq.com/documentation.html"><strong>RabbitMQ官方文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="http://rocketmq.apache.org/docs/quick-start/"><strong>RocketMQ官方文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://dubbo.apache.org/zh/docs/"><strong>Dubbo中文文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://netty.io/wiki/index.html"><strong>Netty官方文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html"><strong>Elasticsearch官方文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://spring.io/projects/spring-cloud"><strong>Spring Cloud官方文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://docs.docker.com/get-started/"><strong>Docker官方文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://kubernetes.io/zh/docs/home/"><strong>Kubernetes中文文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.thymeleaf.org/documentation.html"><strong>Thymeleaf官方文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://cn.vuejs.org/v2/guide/"><strong>Vue.js中文文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://reactjs.org/docs/getting-started.html"><strong>React.js官方文档</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://www.jenkins.io/zh/doc/"><strong>Jenkins中文文档</strong></a></li>
</ul>
<!-- panels:end -->

<!-- tabs:end -->

<hr>
<h2 id="常用本地软件"><a href="#常用本地软件" class="headerlink" title="常用本地软件"></a>常用本地软件</h2><hr>
<p align="left">
    <a href="https://mp.weixin.qq.com/s/ePhaYezFblgt0NgbvtWqww" target="_blank">
        <img src="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/localsoftware.2x9vakmja2g.png" width=""/>
    </a>
</p>

<p>这里将常用软件分为了5大类，包括：</p>
<blockquote>
<ul>
<li>社交&#x2F;娱乐&#x2F;上网</li>
<li>办公软件</li>
<li>效率和美化软件</li>
<li>UP主必备</li>
<li>程序员生产力工具</li>
</ul>
</blockquote>
<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ONx6wjGjQSvOOIgnEBTNJQ">点击查看：我的常用软件大公开！</a></li>
</ul>
<p align="center">

<iframe src="//player.bilibili.com/player.html?aid=87731293&bvid=BV1E7411b7w4&cid=149892227&page=1&as_wide=1&high_quality=1&danmaku=1" allowfullscreen="true" width="100%" height="450" scrolling="no" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"></iframe>

</p>

<hr>
<h2 id="基础软件开发环境和设施"><a href="#基础软件开发环境和设施" class="headerlink" title="基础软件开发环境和设施"></a>基础软件开发环境和设施</h2><hr>
<blockquote>
<p>[!Note]<br> <strong>什么叫基础软件开发环境？</strong></p>
<p> 很好理解。学Java得要装JDK吧？学Python得要Python环境吧？学数据库得要MySQL吧？等等，这些在学习编程之前都是应该提前在自己的电脑上准备好的，而且尽量把全套都先备好，后面直接就用了。</p>
</blockquote>
<p>经常听到有小伙伴反馈和提问有关编程环境搭建和基础软件设施安装的相关问题。</p>
<blockquote>
<ul>
<li>啥？JDK明明装了，为啥还是not found？ </li>
<li>咦？Maven明明配了加速，咋下载依赖还这么慢？ </li>
<li>诶？MySQL明明装了，咋Navicat连会报错？ </li>
<li>哦？Tomcat咋出不来页面？……</li>
</ul>
</blockquote>
<p>每次都是照着网上现搜的帖子操作，一顿操作猛如虎，一看结果各种有问题，要不报错，要不环境起不来，等等。装个环境就浪费了很多时间，而且过了一段时间又忘，还得重新搜帖子，该踩的坑一个都不少…</p>
<p>既然大家有这方面需求，想来想去，关于这个问题，我还是决定写一个事无巨细的PDF文档，把所有编程环境和基础软件设施的安装过程给详细地记录下来了。</p>
<p><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/YNOZSQ5smo1uGE5ZttUZ_w">熬10天夜，我肝出了这个PDF版「编程软件（环境）安装手册」</a></p>
<p>内容包含常见基础开发环境和设施的安装部署，包括：</p>
<blockquote>
<ul>
<li>Linux操作系统</li>
<li>Git工具</li>
<li>Java环境JDK</li>
<li>Node基础环境</li>
<li>Python基础环境</li>
<li>Maven项目构建和管理</li>
<li>MySQL数据库</li>
<li>Redis缓存</li>
<li>RabbitMQ消息队列</li>
<li>Tomcat应用服务器</li>
<li>Nginx Web服务器</li>
<li>Docker环境</li>
<li>Kubernetes环境</li>
<li>Elasticsearch搜索引擎</li>
<li>ZooKeeer环境</li>
<li>Kafka消息队列</li>
</ul>
</blockquote>
<p>大家有需要的可以：<a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/YNOZSQ5smo1uGE5ZttUZ_w">点击此处 → 下载获取</a>！</p>
<hr>
<h2 id="Linux操作系统"><a href="#Linux操作系统" class="headerlink" title="Linux操作系统"></a>Linux操作系统</h2><hr>
<p align="left">
    <a href="https://mp.weixin.qq.com/s/ePhaYezFblgt0NgbvtWqww" target="_blank">
        <img src="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/linuxos.qciprfz30dc.png" width=""/>
    </a>
</p>

<blockquote>
<p>[!ATTENTION]<br> 实际企业级开发和项目部署，大部分情况下基本都是基于Linux环境进行的，所以掌握常用的命令、配置、网络和系统管理、基本的Shell编程等尽量还是要熟练一些，对后续项目实践都大有裨益。</p>
</blockquote>
<blockquote>
<p>[!Note]</p>
<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/GJYVt376C_g4406ux5uw0Q"><strong>本章节置顶资源1：《Linux命令速查备忘手册.pdf》下载</strong></a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/3rV556_0piRNsSpDYwuZ8g"><strong>本章节置顶资源2：《Linux命令行大全.pdf》下载</strong></a></li>
</ul>
</blockquote>
<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/x8rwsIOzYEPXmEVXmWJ4Tg">常用Linux操作系统大盘点</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/WeZLtfrMdnISpX3v5WpJfA">人手一套Linux环境之：macOS版教程</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/onVwwEQ1DAwbvK7qS2YNxg">人手一套Linux环境之：Windows版教程</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/vkLZ_3Jp4HdQ8PDIMYsGEw">69张图：详细记录Ubuntu 20.04安装配置过程</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/YpWp-b3vcAtb_jBwCM7wtg">废柴电脑拯救计划：借助Debian搭建个人专属云服务器</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Kog6AfXYINIDwKMpJMkGFQ">常用Linux命令大整理</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/3NI4FWuOfYMJBiKqqnpqMA">面试常问的20个Linux命令</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/jQAJQo28UsY3YIxC5ci1sA">Linux 桌面进化史</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/6-yb1N-SwHr4EaQ-fvU4Ow">Linux迎来29岁：从个人爱好到统治世界的操作系统内核！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/4G6re30hxAacxmCLjP8KpQ">漫画：Linux 内核到底长啥样？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/GJYVt376C_g4406ux5uw0Q">资源下载 → 《Linux命令速查备忘手册.pdf》</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/3rV556_0piRNsSpDYwuZ8g">资源下载 → 《Linux命令行大全.pdf》</a></li>
</ul>
<hr>
<h2 id="版本控制工具"><a href="#版本控制工具" class="headerlink" title="版本控制工具"></a>版本控制工具</h2><hr>
<p align="left">
    <a href="https://mp.weixin.qq.com/s/ePhaYezFblgt0NgbvtWqww" target="_blank">
        <img src="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/gcm.1sv6s8asfzc0.jpeg" width=""/>
    </a>
</p>

<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/xDYSG4uDz9rgNCuk0RxLjg">资源下载 → 豆瓣9.1分的Pro Git学习手册YYDS！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/bUYz9JwqAYH_Fn6nHPSmTg">科普篇：Git和SVN对比</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/VvpjFUXd6jcatACHyFPHfg">科普篇：5分钟了解Git的前世今生</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/swnwBiuyVmhs5iPqv3H6BQ">科普篇：Git操作与常用命令集锦</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/DRCeDhYiwQQToKukk4RM4g">原理篇：图解Git中的最常用命令</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/DQVVYOWdOPuRsy3m0fg6Xg">原理篇：从原理角度理解记忆Git常见命令</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/sp1YUQ2vnQaIGH4tO3j1Vw">实践篇：从实践中彻底上手Git</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/touo-rygtz0tG6y8NKw65A">实践篇：Git分支开发</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/JMNQi3BSTmKpF9vXMEdKHw">实践篇：如何使用GitHub Flow给开源项目贡献代码</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/SYR4zvjhAH1mX9fxdp8cbA">技巧篇：一招搞定GitHub下载加速！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Qt4bqReZU3ydIsMtCVC0eA">技巧篇：如何在同一台电脑上同时使用多个Git账号</a></li>
</ul>
<hr>
<h2 id="IDE-x2F-编辑器"><a href="#IDE-x2F-编辑器" class="headerlink" title="IDE&#x2F;编辑器"></a>IDE&#x2F;编辑器</h2><p align="left">
    <a href="https://mp.weixin.qq.com/s/ePhaYezFblgt0NgbvtWqww" target="_blank">
        <img src="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/ide.720nw0czwbs0.png" width=""/>
    </a>
</p>

<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/WQiHpAv4bjEIz3fghzamEA">IDEA 2021.2升级体验</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/dojfVvkrxru1eH8Pep7irw">IDEA 2021.1升级体验</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/FhURpMKa9oi2FrV_0woOtw">IDEA 2020.3升级体验</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Ua4TYlcNntLr-x9WQirHyg">IDEA 2020.1升级体验</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/xMwGAL_7sGkmnFvWZroVPw">IDEA插件分享：开发必备的IDEA神级插件大分享</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/V2uAxmdq2e0Hl-y5GaD-Qw">我的IDEA写代码小技巧：幸福感+效率爆棚</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/KNk04dv6Z-ERrHiY03qdAw">为啥我的IDEA Maven依赖下载总是失败？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/RK_ygHgMjayL5-qTnlHbeg">试水JetBrains官方新编程字体</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/WLTfgkPnJYJf9PZM8d8w4Q">如何使用IDEA远程调试线上代码</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ZDVYk188oPLugRI6oeVYIQ">利用VS Code进行远程开发教程</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/_3mwj5_MNln__3SSI8BJ3Q">VS Code常用插件+快捷键整理</a></li>
</ul>
<hr>
<h2 id="API管理-x2F-文档管理"><a href="#API管理-x2F-文档管理" class="headerlink" title="API管理&#x2F;文档管理"></a>API管理&#x2F;文档管理</h2><hr>
<p align="left">
    <a href="https://mp.weixin.qq.com/s/ePhaYezFblgt0NgbvtWqww" target="_blank">
        <img src="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/apidocs.2qlxsrvx2vy0.png" width=""/>
    </a>
</p>

<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Ahs6fnIfFVVPOn3NZpIsNA">科普篇：前后端都分离了，有哪些好用的API管理系统？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/G6-6gqYnTvEsWOGIoj16ZQ">科普篇：几款常用的在线文档神器</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/I_pH1V9iUu-IUayMA5oQSg">一款零注解API接口文档生成工具</a></li>
</ul>
<hr>
<h2 id="CI系统"><a href="#CI系统" class="headerlink" title="CI系统"></a>CI系统</h2><hr>
<p align="left">
    <a href="https://mp.weixin.qq.com/s/ePhaYezFblgt0NgbvtWqww" target="_blank">
        <img src="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/ci.3iokn4xypxy0.png" width=""/>
    </a>
</p>

<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/PgoXJcJX_sm5132VGQoZ1w">常用CI工具大盘点</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Y2gxBmBK2HPvr1uKUUxRYA">Jenkins Pipeline使用入门</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/4NlLEyy2QXX5_snX4r7FSw">讨论：你们公司用啥CI守护系统？</a></li>
</ul>
<h2 id="其他软件-x2F-工具-x2F-网站"><a href="#其他软件-x2F-工具-x2F-网站" class="headerlink" title="其他软件&#x2F;工具&#x2F;网站"></a>其他软件&#x2F;工具&#x2F;网站</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/f9dfQQbpKjMopH6m2Gjiiw">自学数据结构和算法的9大工具和网站</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/jFc-6QK2Mv1zHuhuFrqhog">12个常见的编程开发自学网站汇总</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/J1XjIwtEKjaltqWH-0qmgw">常用Web服务器软件大盘点</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/VB1jGIWWp4XdsLwXe-PKlQ">9款最佳编程字体推荐</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/71Cr9UxvQc6CdmguQIh-IA">5款时间管理工具推荐</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/oMAJaKDfr_bmgCVD0CX1oA">一个程序员的常用在线工具网站分享</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/VtmcuYGt96S4750UFYKnXQ">2020年度开发者工具Top 100名单</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/zWIv5yBTD0Tvt8txb8znrA">Linux服务器上几个常用的监控小工具整理</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/LUPa_uSEd91Pj08VwxsxEQ">效率神器PowerToys使用攻略</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/k19ZT_yH4lzNLUYkH2GUJA">22款适合程序员的终端生产力小工具推荐</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/IU5mmLxflgswICEo3BCWLA">9款优秀的代码比对工具推荐</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/HZRz_A8bLcOTuzcezYEFZg">几款提升效率的软件神器</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/0f6JpBiPqCY8cZ2Ich0Lmg">命令行效率神器 NuShell ！</a></li>
</ul>
<hr>
<hr>
<h1 id="计算机基础"><a href="#计算机基础" class="headerlink" title="计算机基础"></a><strong>计算机基础</strong></h1><hr>
<blockquote>
<p>[!ATTENTION]<br> <strong>计算机基础是最最重要的！</strong>即使后面的东西都没学（或者来不及学），基础部分是肯定需要完成的，这也是后面所有应用框架学习和做项目的基石；反之，在应用框架的学习或者做项目时如果感觉吃力，那就可能非常有必要回过头再来巩固对应的基础知识。<br> 计算机基础的学习不是一蹴而就的，需要一定的反复和回炉才能做到真正的融会贯通，需要一个过程。珍惜每一次回顾和复习基础的机会，应扎实精进，步步为营。<br> 那我们口口声声所说的编程基础（计算机基础）到底指是什么呢？<br> 此处整理为<strong>六大方面：</strong></p>
<ul>
<li>一两门你最熟悉的编程语言（不求多，但求精！）</li>
<li>数据结构和算法</li>
<li>计算机网络</li>
<li>操作系统（计组）</li>
<li>数据库&#x2F;SQL</li>
<li>设计模式</li>
</ul>
</blockquote>
<hr>
<h2 id="编程语言"><a href="#编程语言" class="headerlink" title="编程语言"></a>编程语言</h2><hr>
<blockquote>
<p>[!ATTENTION]<br> 语言在精不在多，切记！完全掌握了一门语言，上手其他的都不难！</p>
</blockquote>
<hr>
<!-- tabs:start -->

<h4 id="Java"><a href="#Java" class="headerlink" title="Java"></a><strong>Java</strong></h4><ul>
<li><p><strong>基本功趣味学习（精讲）</strong></p>
<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/jn7oraFlhRkOmiv3rh74WA">资源下载 → Java基础核心知识大总结pdf笔记下载</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/aZg9SZT3DWkCkEsjlUjTtQ">夯实基本功之：Java程序员找对象攻虐！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/LVpvmBO0GY6TC4gwL_12Yw">夯实基本功之：浮点数在计算机中是如何表示的</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/UyYDt3HB8IO_AoSDLndhxA">夯实基本功之：flaot和double使用时的大坑</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Dg9LcKJBrabcnvC_6wga-A">夯实基本功之：为什么要面向接口编程</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/DgOr7cat8SP0zoY7Ke3toQ">夯实基本功之：枚举精讲</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ypCIMGxyp7AX5cxG5UJ1Hg">夯实基本功之：深拷贝&#x2F;浅拷贝精讲</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/0EfIUB9E-0Oh_Clwuxswuw">夯实基本功之：序列化和反序列化精讲</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/yI82juBiirJ56BZfGJezLw">夯实基本功之：函数式编程例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ufRf8DQQRYQI0q2VxG3hQg">夯实基本功之：如何去掉冗长的if&#x2F;else代码</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/gdYysBB3aD_HmPyvEThFXw">夯实基本功之：注解精讲</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/v-Va_GuSUGr9HVAW84kloQ">夯实基本功之：为什么不要用Date表示时间</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/RsC7peRsFaJAEcG2eTJb0Q">夯实基本功之：去除烦人的NullPointerException空指针异常</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/QZPezSruj0qvBUJEM4jB0g">夯实基本功之：为什么要重写hashcode和equals方法</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/eJy74CbzthHMgRPOA_4wEA">夯实基本功之：Object类精讲</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/9bw2-pkuYSKEnstb4KGsqQ">夯实基本功之：List使用踩坑记录</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/D21mcfI4cxNf4D9ukjESog">夯实基本功之：Map使用踩坑记录</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/cnpfLL4TeL2oyEcHia6Bmg">夯实基本功之：面试必问的ConcurrentHashMap精讲</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/xzV0uiQ0Q2ii5I54f8DPWQ">夯实基本功之：死磕Java I&#x2F;O流知识</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/d93H9TwJKSnpkSBMYJ7QWQ">夯实基本功之：你一般是怎么遍历HashMap的</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/AbZH57nUtePC728XfCvrcw">夯实基本功之：try-catch的使用姿势</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/YbXBWhSlZTwY_bBqpNP2YA">夯实基本功之：if和swictch性能例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/xv0GmAU8fVlS_sxWKWUWYw">夯实基本功之：Java HashMap源码剖析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/KRRLt0EaIwDEPCTGvqnWJA">夯实基本功之：String性能提升10倍的几个用法</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/K0ehqbxrzSz07nqnqRvn5A">实践篇：Java源码编译实战</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/oBDrFnuk1lbfuNHkrhAC5w">面试篇：这10道基础Java面试题，虐哭了多少人</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/f-qIQGbzwHcW5Ur51rCqgg">面试篇：Java基础知识面试题大集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/kNMQp-vjVK6Fq07xalZkng">Java 11新特性例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/1SVao6dMMLhNoFTOvnLy8g">Java 15新特性例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/QrWASACHkMGVop7gNe2DOA">科普：Java收不收费跟我们有毛关系吗？</a></li>
</ul>
</li>
<li><p><strong>多线程和并发</strong></p>
<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/EGQAuvITVJT3fZUdQG84sw">资源下载 → Java多线程+并发编程知识点详细总结PDF文档下载！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/30__VavtpJxEojUjYglGhQ">夯实基本功之：Java并发之原子性、有序性、可见性</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ND-nUCGvXTHkEClKqN1qrQ">夯实基本功之：ThreadLocal源码剖析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/TF04dB-i0q0-dOTqlprmYA">夯实基本功之：Java线程池使用例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/fxl3od5UObRrPGe2AVvAPA">夯实基本功之：彻底搞懂多线程中的volatile</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/cnpfLL4TeL2oyEcHia6Bmg">夯实基本功之：面试必问的ConcurrentHashMap精讲</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Sb1tZC_6CWE57TKvJeMmkA">夯实基本功之：详解Java并发编程中的各种锁</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/pIVf97W4DuAPNxq6zgRvsQ">Java并发和多线程基础面试题大集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ykQ8wkBr-jHzbcD-7HGMEQ">科普向：Java线程和操作系统的线程到底有啥区别？</a></li>
</ul>
</li>
<li><p><strong>JVM虚拟机</strong></p>
<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/lEgHPertXyguZIkv61LlKQ">夯实基本功之：Java内存模型精讲</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/bHkgpznnqixDNyDKwdAbOg">夯实基本功之：面试必问的JVM GC机制</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/XsZUF2nBUSEJoGIA8RimJw">夯实基本功之：JVM垃圾回收硬核18问（附答案）</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/TlX81xJ9fnuDIOTkDxrd1Q">夯实基本功之：搞懂JVM的三大参数类型</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/KASLkkZnjGwVgm_1jbe-mA">夯实基本功之：了解G1垃圾收集器</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/MDM6w2Dw_HYc9XzZevQNeA">实践篇：JDK源码编译上手实践</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/-8xYoAkBUoavcSl69I0XJw">实践篇：线上服务的YGC问题排查例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Sjh9qFPKF250vLQGZig6nw">实践篇：线上服务的FGC问题排查例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/T2DqgJ9-0QiRZQYUeR3c8w">面试题：Java虚拟机（JVM）面试题大集合1</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ZYoeC8yyfReEJDFSqiW8hw">面试题：Java虚拟机（JVM）面试题大集合2</a></li>
</ul>
</li>
</ul>
<h4 id="C语言"><a href="#C语言" class="headerlink" title="C语言"></a><strong>C语言</strong></h4><ul>
<li>待更新…</li>
</ul>
<h4 id="C"><a href="#C" class="headerlink" title="C++"></a><strong>C++</strong></h4><ul>
<li>待更新…</li>
</ul>
<h4 id="Golang"><a href="#Golang" class="headerlink" title="Golang"></a><strong>Golang</strong></h4><ul>
<li>待更新…</li>
</ul>
<!-- tabs:end -->

<hr>
<h2 id="数据结构-算法题"><a href="#数据结构-算法题" class="headerlink" title="数据结构+算法题"></a>数据结构+算法题</h2><hr>
<blockquote>
<p>[!WARNING]<br> 数据结构和算法题对于程序员的重要性不言而喻。参加过笔试或者面试过的小伙伴应该知道，可以说这个东西某一程度上直接决定了面试的成败，现在的互联网公司技术岗面试，数据结构+算法题基本都是必选项。除了几种基础数据结构类型得烂熟于心，基本的几大算法(或者说算法思想)也要了如指掌之外，参加求职前，不论是校招还是社招，非常有必要好好刷一刷LeetCode上的数据结构和算法题，以保持题感。</p>
</blockquote>
<hr>
<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/EaDLaLy3YjrNiSoNofwMMA">资源下载 → LeetCode算法刷题Golang版答案PDF文档</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/qR6KTfldk41lsOj1Ghp6Og">资源下载 → LeetCode算法刷题C++版答案PDF文档</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/kWTJ9640mPegr5wqVE0GMg">资源下载 → LeetCode算法刷题Java版答案PDF文档</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/gXH98f1p5cCYVETCn9w9kA">资源下载 → 谷歌学长的数据结构+算法题代码笔记手册</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ZVwIUN-xf9FuxOFXW8H3Nw">数据结构：24张图详解九大数据结构</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/UanDueZi3MwlcKYGMNQPGg">数据结构：哈希表详解</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/v6rr0M9AW_kSMEtjkc-Mqw">数据结构：栈Stack的几种含义理解</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/k4-RaW4ROlo6chSXsO_4AA">数据结构：各种树详解</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/czkZcQL8mEqG2xeX8huqsA">数据结构：跳表精讲</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/iG9zNHYLkEyHF3M4RpoWKw">数据结构：数组和链表的性能对比</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ekGdneZrMa23ALxt5mvKpQ">算法：十大经典排序算法大梳理 (动图+代码)</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/za_MJY3-r9Gfiu3BJfej7Q">算法：排序算法趣味对比</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/1ExIav9uK4bvVnnf4t0H2Q">算法：二分法及其变种</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/H1ttBFuBY5n3Dbh3YaTmlw">算法：10张图搞定KMP算法</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/FYx3acRh9JXAIb7y97G39A">算法：面试官最爱的字符串匹配算法精讲</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/vGjcX4nHv6QT2-qKHZM8Dw">算法：8大常见算法思想总结</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/JLbjzCdVlJ_de2uGgBsUzw">算法：一文彻底学会递归思路解题</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/uuNaZfzhG3KaoEtez8Migw">算法：10张动图理解递归</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/a3_bMRmTqZxMBruYsPC9-w">算法：分治算法详解</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/tqGKHZzSyDBgEp-oWsOztQ">算法：递归算法详解</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/bGH_o1BsJtgnC2rFugtsRw">算法：动态规划常见算法题例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/mBTyBkeNHoW7-Rcbv2Exwg">算法：搞定算法复杂度分析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/U6D1PNjuBAcRd5UZRr0F3w">算法：常用算法复杂度速查表</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/JhHPAaOInIi4lZ-UrCLdgg">算法：常见刷题模式套路分析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Gz9-f_G6P-0tKrReAinw0A">算法：算法题刷题的心得和建议</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/HUS12phrTbNzAE6uFHO9lg">算法：求职必刷算法题大集锦</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/f9dfQQbpKjMopH6m2Gjiiw">工具推荐：自学数据结构和算法的9大工具和网站</a></li>
</ul>
<hr>
<h2 id="计算机网络"><a href="#计算机网络" class="headerlink" title="计算机网络"></a>计算机网络</h2><hr>
<blockquote>
<p>[!WARNING]<br> 为什么一定要学好计算机网络？原因很简单，因为计算机网络中的各种协议栈是当下繁荣的互联网通信的基石，尤其建议要牢固熟练地掌握TCP&#x2F;IP协议栈。</p>
</blockquote>
<hr>
<ul>
<li><a target="_blank" rel="noopener" href="https://www.bilibili.com/video/BV1U4411M71p">视频科普：计算机网络该怎么学</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/v34D8xWGPW8LgENy3G2QZA">概念科普：如何系统地学习计算机网络</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/t8Dz-4D6BuBevZYz5Jhklg">概念科普：计算机网络的89个核心概念</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/hZF2P4oQE6dsuXKWLEgDKA">工具科普：学网络时，可以先落实这几款利器工具</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/t2Csrl7idUXISKW54cpV1g">探究原理：浏览器输入网址一回车，后面到底发生了什么</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/AjcW7ELOTTqqdnUHpMbccQ">探究原理：你可能没有细究过的TCP&#x2F;IP</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/07zloKKMUl-RHN6tWqZIJQ">探究原理：一个数据包在网络中到底是怎么游走的</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ZCddesfN0qISh3Rqo2jbWA">探究原理：两台计算机之间究竟是如何通信的</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/55bbQX2-SUNe6PEI9My5fA">探究原理：ping命令用得这么6，原理知道不</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/QuCxkSjdM_E12lXlpnhKIQ">探究原理：一台Linux服务器最多能支撑多少个TCP连接</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/EZwOUGMrGKEF_POisJKmuw">探究原理：都说HTTP协议无状态，这里的「状态」到底指什么</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/5oFKdbFWgZrwqESNTZn77w">探究原理：Session&#x2F;Cookie&#x2F;Token</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/u242LSHnePBg_KbMc0ioTA">探究原理：三次握手底层深度理解</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/21Tk-8gxpDoH9DNWNYCWmA">知识总结：计网IP部分知识总结</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/vk_QZDpJLVEXXNe1jYzd8w">知识总结：图解HTTP的前世今生</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/8HJ-V1BbV9wp89HS-XulXw">知识总结：HTTP和HTTPS协议大总结</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/H4gbg7bfnw61jZQcapTnMw">面试相关：GET和POST到底有什么区别</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/lFnyBaaP3f0eNcKGW5RtCg">面试相关：面试最爱问的三次握手和四次挥手问题</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/FJGKObVnU61ve_ioejLrtw">面试相关：HTTP常见面试题集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/doxVJZ1G6187B4AOXb0JlA">面试相关：计网TCP&#x2F;UDP部分高频面试题集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/PIGfhMaAx9R5C4x5eJQnIw">面试相关：计算机网络高频12问</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/L8jmABzoI_e4dCcECenHtQ">实践系列：网络排错思路大总结</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/_fB7r53BGZRvpG9YAPRQ8A">实践系列：抓个包看一看浏览器里的HTTP请求到底是如何完成的</a></li>
</ul>
<hr>
<h2 id="操作系统"><a href="#操作系统" class="headerlink" title="操作系统"></a>操作系统</h2><hr>
<blockquote>
<p>[!WARNING]<br> 学好操作系统有利于我们深入理解计算机底层，这样平时在遇到疑难杂症时，能够更容易看到问题的本质，并高效解决；另外操作系统里的很多优秀的设计思想、经典的架构、算法、思路也值得我们反复理解和思考，很多思想在平时的工作中也可以借鉴和运用。</p>
</blockquote>
<hr>
<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ttncekujB82g88GRx3a6lQ">知识总结：学编程要懂的操作系统基础</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/VsQ7IpP-jnXSjJhOAzl-ew">知识总结：程序员必知的89个操作系统核心概念</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/1Rzvu9uCTef5l_8Qw3ff0A">知识总结：操作系统主要概念硬核讲解</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/m-AmxDVUfko7OTUsCapnPA">知识总结：20张图详解操作系统内存管理部分知识点</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/FoYiPB-2LuIpnTW8gck2EQ">知识总结：这才是对进程和线程最通俗易懂的解释</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Pfc31qoWfL6_uva6ePBmVA">知识总结：操作系统并发三剑客之进程&#x2F;线程&#x2F;协程</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/yXMgpAhz3JhtCtutMQnXvQ">知识总结：操作系统高并发服务模型大科普</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/7AHS5AlY2OaiLO4ag6zVMQ">知识总结：这可能是讲死锁最通俗的一篇文章</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/vwJ5T7x1Jv4wa_x7nwr54Q">知识总结：一举拿下网络IO模型</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/iFIt8t-q6hU-Ghwlj0hohw0">知识总结：用一个故事来感受一下什么叫NIO</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/xIfxzxCfbvBvQ2c0aUuA0A">知识总结：多路复用、非阻塞、线程与协程</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/laP7Vxl6o40mIYBS7Cuj7A">知识总结：搞懂原码&#x2F;反码&#x2F;补码</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/a2Q1DQqOHdhtGEjJ4QxPew">知识总结：30张图解高并发服务模型哪家强</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/vMvAgo9IWaLtDwxW1627YA">原理探究：新建一个空文件到底会占用多少磁盘空间？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/lR_A3jbfRiRjchz_lyyKxw">面试相关：2.5w字+36张图+1周时间：爆肝操作系统面试题！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/oTEMOQY1xcG8uVceW-kLDA">面试相关：1.3w字的操作系统高频面试题大分享</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/5f3ku77xSO8UlaOsTkOnHQ">面试相关：学完操作系统内存管理，能回答这8个问题吗</a></li>
</ul>
<hr>
<h2 id="数据库-x2F-SQL"><a href="#数据库-x2F-SQL" class="headerlink" title="数据库&#x2F;SQL"></a>数据库&#x2F;SQL</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/OnGaqyUpB58pC2rqqzIzgw">原理探究：详解一条SQL的执行过程</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/36Jaj79Y8BxFoDB3Bwe7mg">原理探究：MySQL的数据存在磁盘上到底长什么样</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/WMuxdG3ymNMWWDk1XhLwZQ">原理探究：数据库索引到底是什么</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/d7Zfat2fP6IX5DMKKtEIjQ">原理探究：为什么MySQL索引要用B+ tree</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/-mOOchaXx_pKI6qWhohEnA">原理探究：为什么用了索引，SQL查询还是慢</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/4K3borSZXt-yc5t5UJnJpQ">原理探究：数据库索引的原理和使用准则</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/iBnav_WPrX5vjR-NbdNeQg">原理探究：为什么你写的SQL那么慢</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/lyAFcnZIoyhACw78Nf9xQg">原理探究：count(1)和count(*)到底哪个效率高</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/7vN9Nf20NGnvLKALHw_O1Q">原理探究：为什么阿里规定超过三张表禁止join</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/aPVs9Jrk07KsXcXdPOpx5A">原理研究：什么是MySQL索引下推？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/yflzIQFiNa3tDJm7U9P8ig">原理探究：为什么大公司后台数据库都要搞分库分表？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/QBeyJz2gVq1p7wBxcY1Gfw">原理探究：MySQL不会丢失数据的奥秘就藏在这里</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/CCLsmKSsodtkz4iX84Cdig">原理探究：MySQL主从复制那些事儿</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/caBYeVtZvNzbSs4q-6710Q">实践应用：常见的SQL错误（不当）写法例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/hl11JYMwl30FsDVZ40CLVQ">实践应用：SQL优化的几个角度</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/hE2uKE2ffNCmeHLRn2KSTQ">实践应用：数据库、数据表设计规范例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/jl0j-T6XldN6Nq-jYoQ-gA">实践应用：梳理开发中常用的SQL优化途径</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/SPgtpfgv6bz2AfPa1CYYeQ">实践应用：先更新数据库还是先更新缓存？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/EplL3kBx5vOXGDhDOP8NjQ">实践应用：百亿级数据分表后如何分页查</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/mnZT0Z5L6Hi6gRgEO1C9tg">实践应用：什么是SQL注入攻击</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/4K3borSZXt-yc5t5UJnJpQ">实践应用：用对这些场景下的数据库索引，领导说我有点东西</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/MA7FVeJDMg8WDJABiBWpBA">实践应用：一个遗留项目的SQL优化实战录</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/UYZZkrbAetgnPUjGa71fJA">实践应用：误删数据库后该如何恢复</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/eQKphrkPeN_-EcWIxETz9Q">实践应用：如何科学根治慢SQL？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/MLvJsJuFAHHcllqvk1nVRQ">面试相关：面试官最爱的数据库索引连环问</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/aBboeqEphejICklAKLqS2Q">面试相关：30道保底的MySQL数据库面试题集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/WqM5mhnLOqZhcdzPLeWh5w">面试相关：数据库自增ID用完了会怎样</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/RDOKLnG7P1j5Ehu3EyrsCQ">面试相关：如何保证缓存和数据库的一致性问题？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/8ddEzG-NzzFD35ehvbER7A">面试相关：面试官最爱的MySQL连环问</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/1VCC3i6ZCk7sb9kVRZ1czQ">面试相关：如何实现丝滑的数据库扩容</a></li>
</ul>
<hr>
<h2 id="设计模式"><a href="#设计模式" class="headerlink" title="设计模式"></a>设计模式</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/miV4SH1Eb_FMogQ2XYvPuA">资源下载 → 23种设计模式学习笔记PDF文档</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/dXUgiMacKjwTBwX16cXNBA">单例模式详解</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/8TfJ1uhMiKHnTmlF9D0L2Q">工厂模式讲解, 引入Spring IOC</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/GT1-yrxJ5KF0xeMydbJDCQ">什么是动态代理模式</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ZcKqGT2Sn4wVScExSF9Alg">经典面试题：Spring用到了哪些设计模式</a></li>
</ul>
<h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/7-CTSWN-VLYgPH5H2nPU8w">每个开发人员都应该了解一点的UML规范</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/VFUg1S0ApuFzlTNYSCLkMQ">计算机时间到底是怎么来的</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/kTADQtTeOWPuXsvR9HsUIg">乱码问题科普：“锟斤拷”的前世今生~</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/dVgDv1bNH8ivO0Ft0FtmZg">从一个面试题看程序员的几项基本功</a></li>
</ul>
<hr>
<h1 id="应用框架和工具"><a href="#应用框架和工具" class="headerlink" title="应用框架和工具"></a><strong>应用框架和工具</strong></h1><hr>
<blockquote>
<p>[!NOTE]</p>
<ul>
<li><p>计算机基础聊完了，接下来就是应用和实践的环节了。这部分通常会涉及到一些<strong>工具</strong>、<strong>编程环境</strong>、以及<strong>应用框架</strong>。</p>
</li>
<li><p>企业级开发不同于个人自学，出于<strong>可复用性</strong>、<strong>稳定性</strong>、<strong>开发成本</strong>、<strong>开发效率</strong>、<strong>质量保证</strong>等一系列因素的考量，不可能每一个功能、每一个组件都从0开始徒手造轮子，所以这时候各种应用框架和工具的出现就非常有帮助了。</p>
</li>
<li><p>其实框架讲白了就是别人经过多年迭代写好的一套<strong>工具</strong>、<strong>代码库</strong>、<strong>逻辑</strong>、亦或是<strong>流程</strong>，把原本都需要从0开始手写的基本功能和组件都给封装进去，用户只要符合框架约定的规则进行编码，或者调用框架提供的方法或者工具，就能快速拉起业务功能，创造实际经济价值。</p>
</li>
<li><p>所以框架的出现从不同的角度看也是有多面性的：对于企业级开发效率提升而言肯定是有帮助的，但是对于程序员个人思考编码能力提升却未必是好事，所以多注重基础、深挖原理，提升自身竞争力还是非常有必要的。</p>
</li>
</ul>
</blockquote>
<h2 id="Spring系列框架"><a href="#Spring系列框架" class="headerlink" title="Spring系列框架"></a>Spring系列框架</h2><!-- panels:start -->

<!-- div:left-panel -->

<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/-MYQ-meSUcr-wZhfUbGq3Q">原理探究：Spring Boot项目究竟是怎么启动的？源码剖析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/NqG7GzsPhwI76h3nujTCgQ">原理探究：SpringBoot中@SpringBootApplication注解探秘</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/uYNpoxcZ22goiev3uSus2w">原理探究：Spring @Autowired注解详解</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/LGYSChfDLKuCQVMYGi0Omg">原理探究：Spring @Value注解详解</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/m2DrtDxBzShtNF2Uk6zSAg">原理探究：Spring框架是如何解决循环依赖问题的</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/YZT7NURQsNBSoSNsWBciQg">原理探究：Spring中竟然有12种定义Bean的方法</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/PNmlpv786kgk5Pyhr5XSsw">原理探究：Spring的Controller究竟是单例还是多例，如何保证并发安全</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/uQxxGpJJo4XfkLfHHp8nHw">原理探究：为什么Spring的Bean默认是单例的</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/8brVERYV-XMIGB0Qly_mOg">原理探究：单点登录(SSO)原理和实现</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/0zRks2Cz36S8N70Uonb0OA">原理探究：面试常问的Spring IoC原理解析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/yXKPNB2dB99K_9gOWw6UHg">原理探究：了解这些，就可以在Spring启动时为所欲为了</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/uVqkLkkxot-zsoVPo1ri1A">实践应用：Spring Boot日志框架实践</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/NH7ck79I3U0bJTEv37aECw">实践应用：利用神器BTrace追踪线上Spring Boot应用运行时信息</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/GGeavPrGAzF1YOxCSk3YrQ">实践应用：Spring Boot项目集成全局唯一ID生成器UidGenerator</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/jdV8X_R9eeZRus5bfoSNNg">实践应用：Spring Boot Admin2.0开箱体验</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/WQ-2fPOxk0GvSHiRR5-kQw">实践应用：Spring Boot项目传参校验最佳实践</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/AdtUX9davFH-C60gBypnoA">实践应用：Spring Boot项目优雅传参方式讨论与实践</a></li>
<li><a href="hhttps://mp.weixin.qq.com/s/ZLUOWYVsf6gDcT94X_saJg">实践应用：基于Spring Security Oauth2的SSO单点登录+JWT权限控制实践</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/AEWjwIEjVMf_cRixiIb7-Q">实践应用：封装一个好用的流水号ID生成器id-spring-boot-starter</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/V2jGlNn4EsM-_RheIk0TYg">实践应用：封装一个好用的elasticsearch-spring-boot-starter</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/CTDEFxTKdk0qxK9VNSEIqw">实践应用：Spring Boot项目集成jasypt-spring-boot加密组件</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/sMi1__Rw_s75YDaIdmTWKw">实践应用：基于Spring Security+JWT的权限系统设计</a><!-- div:right-panel --></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/u3ioahBPOno81dp3f2IDJA">实践应用：Spring Boot项目集成全局唯一ID生成器Vesta</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/SeXKbp9ee-FMNKfuSqpZFw">实践应用：Spring Boot项目集成Mybatis-Plus</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/J0UcedPhgHiTndk80CNikA">实践应用：如何自制一个Spring Boot Starter并推到远端公服</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/OWX-hsk1F11Bvk2PWmnzxA">实践应用：Spring Boot项目集成Ehcache缓存</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/2-HdLggtBSmiyJI449cLow">实践应用：Spring Boot项目集成自然语言处理工具包HanLP</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/PGFDNoNuzlOR0m-tiIQGWw">实践应用：基于Spring Boot实现图片上传&#x2F;加水印一把梭操作</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/d7do5NZeu4-yRo2RfJK7uA">实践应用：Spring Boot项目集成EVCache缓存实践</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/C4VBAm4N3AjvXJ303wdV5A">实践应用：Spring Boot项目集成Guava Cache本地缓存实践</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ehe7Ub5RAYAql_oPZmerAQ">实践应用：Spring Boot项目集成MyBatis Generator进行数据层代码自动生成</a></li>
<li><a target="_blank" rel="noopener" href="http://mp.weixin.qq.com/s?__biz=MzU4ODI1MjA3NQ==&mid=2247484900&idx=2&sn=45df41412575afb244f75de08b6bbe7f&chksm=fdded320caa95a36e85c510a1a72951b97a579511db7bd58aba2270020434b5579b8c3ce578f&scene=21#wechat_redirect">实践应用：初探Kotlin+SpringBoot联合编程</a></li>
<li><a target="_blank" rel="noopener" href="http://mp.weixin.qq.com/s?__biz=MzU4ODI1MjA3NQ==&mid=2247485020&idx=1&sn=3c3405807f96a597398f513c48bb094e&chksm=fdded098caa9598e6159bd7315180e149e6a789a3ee75d42b4acaaae96669504e08378eeddae&scene=21#wechat_redirect">实践应用：Spring Boot项目集成神器Lombok实践</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/7pv9TwWHzF624sVMFDypvQ">实践应用：Spring项目集成Lombok插件的优缺点分析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/dt2B8Pku1dSXQuzDJYiEgQ">实践应用：Spring Boot应用监控实战</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/UvFWTyFUUwfRXi1ZqmZdGA">实践应用：Spring Boot项目部署于外置Tomcat容器</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/M5Y1VInGRkx_RHJn9KWBpA">实践应用：Spring Boot热部署加持</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/N7hzj4IR-di_KEgOts5OBg">实践应用：Spring Boot高效数据聚合之道</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/p5LTCPgsGoEjuKL0F65PAg">实践应用：Spring项目日志打印常见问题</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/euzbHPpQG2BSKl93N5L1Hg">面试相关：Spring面试夺命连环10连问</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/q4CajkpSUC8TCgv55VK5aQ">面试相关：Spring经典面试题集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/cLh9xCDkVG0KV-uaX8PkNw">面试相关：Spring Boot基础面试题集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/g0br3PfTmm8C_nkKbzE_ig">面试相关：Spring Cloud基础面试题集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ZcKqGT2Sn4wVScExSF9Alg">面试相关：说说Spring用到了哪些设计模式？</a></li>
<li>内容持续更新中…</li>
</ul>
<!-- panels:end -->

<!-- panels:start -->

<!-- div:left-panel -->

<h2 id="前后端分离"><a href="#前后端分离" class="headerlink" title="前后端分离"></a>前后端分离</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/um5kDYBscf5sy7FUhmP7ww">概念科普：到底什么是RESTful ？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/lrFQUEITm_3zASIBR1mcQw">概念科普：RESTful风格的前世今生</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Y0z-3r_Mdm-etCwa0GmQmQ">概念科普：为什么需要前后端分离？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/zAOYAcR-6DEJU_s0qXe91g">实践应用：前后端分离的接口规范，我们是如何做的？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/niYHlrCDIkA1NqPVI_VJ8w">实践应用：前后端分离式开发：高效协作10条准则</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/TqSQ21nNvV5WwWDY_WItQA">实践应用：前后端分离后，接口联调总是甩锅怎么办？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/B-mJjBeJy5W7s2O79Iitqg">实践应用：前后端分离项目接口优雅数据交互例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Sjrgf3Tp3vR5zsNIiYzdpA">实践应用：前后端分离实践中常遇到的跨域问题</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Ahs6fnIfFVVPOn3NZpIsNA">工具推荐：前后端都分离了，该搞个好用的API管理系统了</a></li>
</ul>
<!-- div:right-panel -->

<h2 id="分布式-x2F-微服务"><a href="#分布式-x2F-微服务" class="headerlink" title="分布式&#x2F;微服务"></a>分布式&#x2F;微服务</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/NJFJ5UrzGk0cMGL1oZe0Bg">科普篇：企业里常用的软件架构剖析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/kfhCEDSUGwnNUbtGDL_rvQ">科普篇：单体→分布式→微服务，这些年的软件架构是如何发育的</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Iy1dguNFkU73r1FxYIvlIQ">科普篇：微服务架构的全局图景分析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/8CvoGCtGDvMHR91Lx89pxQ">科普篇：分布式架构负载均衡的几种方式</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/iTnKumgre3SzrBuWf8KB6g">科普篇：RPC 技术(框架) 大科普</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/_56jq_p_nDUiBwaI2MTlmA">原理探究：什么是分布式事务</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/RViDM1WHE61SDLNKzUmTAg">原理探究：Redis分布式锁保姆级无死角分析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/fLLd-ml-gdo3-700iJso_A">原理探究：如何设计一个高并发的秒杀架构？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/J0aSVry1-Ss1OTA-jQAX3w">原理探究：亿级流量网关设计思路</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/pg6lyAkgAaqSAZjiPgQTWA">原理探究：分布式架构的几个常见的坑</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/iCw-CHa5ITz6zoQI78Wb3w">实践应用：RPC框架实践之：Apache Thrift</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/LdzkBUzvyjMVW7pgzkA23w">实践应用：RPC框架实践之：Google gRPC</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/U4eustBBu9N-6B1SRsYc7w">实践应用：Spring Cloud Feign的两种使用姿势</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/oMsZquaphqEJqoGt1dt9WA">实践应用：Spring Cloud Eureka Server高可用之：在线扩容</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/tRRwG1jnWi5r1XlbeBlv8g">实践应用：Eureka Server 开启Spring Security Basic认证</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/EAi7F3lBQ7ZrjSjNnFkj4g">实践应用：Eureka Server启用 https服务指北</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/c55ejzWEU6SQBdcmTTRC1g">实践应用：微服务调用链追踪中心搭建</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/wQRBxBBXCnP0YKPvtIPRcA">实践应用：利用Zipkin追踪Mysql数据库调用链</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/VjBiUmQNQPpSHeSVjK1C2A">实践应用：一个小团队的微服务架构改造之路</a></li>
<li>内容持续更新中…</li>
</ul>
<!-- div:left-panel -->
<h2 id="容器-x2F-集群"><a href="#容器-x2F-集群" class="headerlink" title="容器&#x2F;集群"></a>容器&#x2F;集群</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/hVNMfh9nWdilXHSqvyS9ng">知识总结：常用虚拟化技术（VMware&#x2F;KVM&#x2F;Docker）对比</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/YlcvlUQ-xkz25PuYkeEQqw">知识总结：Docker从入门到干活，看这一篇入门</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/jf4qWaEYfn0CH5A6fG6MKw">知识总结：Docker Swarm的前世今生</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/MDGvWKkk4npWtqo2k4tsfg">知识总结：编写高效Dockerfile的几条准则</a></li>
<li><a target="_blank" rel="noopener" href="https://my.oschina.net/hansonwang99/blog/1603378">实践应用：Docker Swarm集群初探</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/sO9_TixS0XrKoCKIS9oETw">实践应用：利用ELK搭建Docker容器化应用日志中心</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s?__biz=MzU4ODI1MjA3NQ==&mid=2247483763&idx=1&sn=6ceb9e73540b5016dadfb212636b3855&scene=21#wechat_redirect">实践应用：Docker容器可视化监控中心搭建</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/evxiE6nhK6_y6zLMFWHTKQ">实践应用：Docker容器跨主机通信之直接路由方式</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/-54IZbsX2nQIHaMZ1y6fTQ">实践应用：利用TICK搭建Docker容器可视化监控中心</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/wx68Chw1XaKQ1cb57jTiOw">实践应用：利用Kubeadm部署Kubernetes 1.13.1集群实践录</a></li>
<li><a target="_blank" rel="noopener" href="http://mp.weixin.qq.com/s?__biz=MzU4ODI1MjA3NQ==&mid=2247483699&idx=1&sn=57b84f4ec72c8a578934cdb4225e6fe7&chksm=fdded7f7caa95ee198652c295b48b74565fd244afc4dccc0551b036c8216caab0397a1342d99&scene=21#wechat_redirect">实践应用：利用K8S技术栈打造个人私有云（连载之：初章）</a></li>
<li><a target="_blank" rel="noopener" href="http://mp.weixin.qq.com/s?__biz=MzU4ODI1MjA3NQ==&mid=2247483755&idx=1&sn=92a547c579aeacf1db9a8f0e56601b52&chksm=fdded7afcaa95eb9d6aa6cf323bff1df46692fc6a6672e0a483105f091ddf9670fb06d034e2a&scene=21#wechat_redirect">实践应用：利用K8S技术栈打造个人私有云（连载之：K8S集群搭建）</a></li>
<li><a target="_blank" rel="noopener" href="http://mp.weixin.qq.com/s?__biz=MzU4ODI1MjA3NQ==&mid=2247483758&idx=1&sn=629b6219a06374b2050703b9549037fa&chksm=fdded7aacaa95ebc9a3e88e839515b13109752c26c586032ae60219d2c3b24e13385e1bcd37c&scene=21#wechat_redirect">实践应用：利用K8S技术栈打造个人私有云（连载之：K8S环境理解和练手）</a></li>
<li><a target="_blank" rel="noopener" href="http://mp.weixin.qq.com/s?__biz=MzU4ODI1MjA3NQ==&mid=2247483759&idx=1&sn=8403d42fe1769a252f9ee2997fc2f561&chksm=fdded7abcaa95ebd8cdae86f4d692f1f6e92daab74dbbd8c56c6db8fe6aa2a3616ccce1eebb1&scene=21#wechat_redirect">实践应用：利用K8S技术栈打造个人私有云（连载之：基础镜像制作与实验）</a></li>
<li><a target="_blank" rel="noopener" href="http://mp.weixin.qq.com/s?__biz=MzU4ODI1MjA3NQ==&mid=2247483760&idx=1&sn=d44f2c744ccdc965fb6c7e4d9efe9f92&chksm=fdded7b4caa95ea278d7363b4b4788d84914b915422a9cc98e7936c3bce0c7ce1197abfac13f&scene=21#wechat_redirect">实践应用：利用K8S技术栈打造个人私有云（连载之：K8S资源控制）</a></li>
<li>内容持续更新中…</li>
</ul>
<!-- div:right-panel -->

<h2 id="缓存-x2F-MQ-x2F-中间件-x2F-服务器"><a href="#缓存-x2F-MQ-x2F-中间件-x2F-服务器" class="headerlink" title="缓存&#x2F;MQ&#x2F;中间件&#x2F;服务器"></a>缓存&#x2F;MQ&#x2F;中间件&#x2F;服务器</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/tL2HVoeEH9hnalb9-tuoXg">缓存：Redis字符串类型内部编码剖析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/TdPcIMnv4iKIx3dRjei95A">缓存：Redis哈希结构内存模型剖析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/0R0Evh1QX5BPOQt9233vpQ">缓存：15张图解：为什么Redis这么快</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/6NobACeeKCcUy98Ikanryg">缓存：Redis面试全攻略、面试题大集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/aNdWL3xKtjOd_briXL6Bjg">缓存：把Redis当作队列来用，真的合适吗？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/RDOKLnG7P1j5Ehu3EyrsCQ">缓存：缓存和数据库一致性问题，看这个就够了</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/lxMP4-Z3DzQg5fRqLs9XNA">缓存：面试官爱问的Redis高频面试题大集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/m9trzqE3Zd0KHC1cA3PlZQ">缓存：1分钟科普：什么是缓存穿透、缓存雪崩、缓存击穿？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/x1AobPWpMufNWqrBnc5sZg">缓存：如何构建一个稳定的高性能Redis集群？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Fgg2bNhdOTRfHIzGX86X3Q">缓存：轻量级memcached缓存代理twemproxy初探实践</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/SPgtpfgv6bz2AfPa1CYYeQ">缓存：先更新数据库还是先更新缓存</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/WMriUm27CZkiSWEt1f4lig">MQ：消息队列RabbitMQ快速入门上手</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/bUNAD2fkGTD73jVLw8rDHg">MQ：Kafka快速入门上手</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/o-rqnOH4FHeHaz0VqoHnFg">MQ：从面试角度一文学完Kafka</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/vC0YbMJxHqs0JfcdAxjhHg">MQ：为什么Kafka用得这么多？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/PDvG5vSuA_NCkJ3mMUua5w">MQ：刨根问底之Kafka到底会不会丢消息</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/u6_WH-r1bRc4m7CUm21Tew">MQ：大厂面试必备之消息队列连环问</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/wM0Vj_YMh7881NwK-AwKSw">MQ：后端岗面试必备之Dubbo九连问</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/mif0NmY1Ij6lapHppb6LFg">服务器：Nginx服务器开箱体验</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/099PJZE89JVNnaF0kwePDQ">服务器：从一份配置清单详解Nginx服务器配置</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/VR1jEhJVXCfja3Pmo_kKkw">服务器：为什么Nginx能轻松撑起几万并发</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/pdQNDMQQnXpoVKIA8JpyQQ">搜索引擎：CentOS7上搭建多节点Elasticsearch集群</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/BE8LrpviJNXGV41bhzGFTw">搜索引擎：一文上手Elasticsearch常用可视化管理工具</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/d2maG61HB2_rU56DYD2A9w">搜索引擎：从一份定义文件详解ELK中Logstash插件结构</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/C8JTxdjeSCR22xeAiLHHGg">搜索引擎：Elasticsearch索引的映射配置详解</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ir0uurwo95hB3g__vTceJQ">其他中间件：ZooKeeper面试常见十二问</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/3L5PcA0dGlrqJ2FjM_C77Q">其他中间件：基于代理的数据库分库分表框架Mycat实践</a></li>
<li>内容持续更新中…</li>
</ul>
<!-- div:left-panel -->


<!-- panels:end -->

<hr>
<hr>
<h1 id="书籍-x2F-资料推荐"><a href="#书籍-x2F-资料推荐" class="headerlink" title="书籍&#x2F;资料推荐"></a><strong>书籍&#x2F;资料推荐</strong></h1><hr>
<p align="left">
    <a href="https://mp.weixin.qq.com/s/ePhaYezFblgt0NgbvtWqww" target="_blank">
        <img src="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/bookref.32p5e3kiqri0.jpg" width=""/>
    </a>
</p>

<hr>
<blockquote>
<p>[!TIP]</p>
<ul>
<li><p>毫无疑问的是，对于上文提到的 <strong>「编程基础」</strong> 部分，有大量经典的书籍值得阅读，每一本都是大师们若干年经验的汇聚，所以学好编程基础，对于我们普通人来说，看书是一个非常直接有效的方式。</p>
</li>
<li><p>很多经典书看一遍可能远远不够，正所谓 <strong>「初看懵、再看迷、三看发现有点小意思」</strong> 讲的就是这个道理，这事急不得，而且有些东西的确需要一个反反复复的过程，有些甚至是在工作后的实践中才会遇到，所以珍惜每一次回炉重造的过程吧。</p>
</li>
</ul>
</blockquote>
<hr>
<p>书籍资料推荐：</p>
<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/voNG467kSVfR-yjwelQhow">Java开发：我的Java后端开发小书架</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/OislKcvk-YSFstIl2PcrbA">Java开发：一份Java程序员的珍藏书单</a></li>
<li><a target="_blank" rel="noopener" href="https://www.bilibili.com/video/BV1ob411m76i">C&#x2F;C++开发：自学C&#x2F;C++书籍整理</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/JFmj5cMhpJ2BKFq2p4IQGw">前端开发：前端开发学习资料+书籍盘点</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/nkBsUgbuMK3ArHfFc2417w">嵌入式开发：嵌入式开发学习资料+书籍推荐</a></li>
<li><a target="_blank" rel="noopener" href="https://www.bilibili.com/video/BV1kJ411W7pi">视频：我的计算机编程书单</a></li>
</ul>
<p>互联网开源教程推荐：</p>
<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/f9dfQQbpKjMopH6m2Gjiiw">羊哥当时自学数据结构和算法的9大工具</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/-Xp84QH5zQvvHaGWTJF9MA">拜访了这位小哥的GitHub后，我失眠了</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/C48HcLYlLbYx1O82U0mpyg">GitHub上这份计算机自学指南火了~</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/V_Dfs44C3wtzlMGdUgY7qg">GitHub 40000星！收下这份宇宙最强「程序员生存指南」</a></li>
</ul>
<p align="left" style="color:black">
编程资源汇总和下载 → 
  <a href="#README?id=资源汇总和下载" style="color:blue">点击查看
  </a>
</p>

<p align="left" style="color:#34495e">
编程视频教程推荐 → 
  <a href="#README?id=视频教程推荐">点击查看
  </a>
</p>

<hr>
<h1 id="项目经验获得"><a href="#项目经验获得" class="headerlink" title="项目经验获得"></a><strong>项目经验获得</strong></h1><h2 id="自学党如何获得项目经验？"><a href="#自学党如何获得项目经验？" class="headerlink" title="自学党如何获得项目经验？"></a>自学党如何获得项目经验？</h2><p align="center">

<iframe src="//player.bilibili.com/player.html?aid=541205956&bvid=BV1Ai4y1V7PX&cid=208099724&page=1&as_wide=1&high_quality=1&danmaku=1" allowfullscreen="true" width="100%" height="450" scrolling="no" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"></iframe>

</p>

<!-- panels:start -->

<!-- div:left-panel -->

<h2 id="个人博客-x2F-网站搭建"><a href="#个人博客-x2F-网站搭建" class="headerlink" title="个人博客&#x2F;网站搭建"></a>个人博客&#x2F;网站搭建</h2><ul>
<li><a target="_blank" rel="noopener" href="https://www.aliyun.com/minisite/goods?taskPkg=1212cpz&pkgSid=182176&userCode=eso7wf2g">拥有一台属于自己的公网云服务器！</a></li>
<li><a target="_blank" rel="noopener" href="https://www.bilibili.com/video/BV1Yb411a7ty">手把手教你从0开始搭建自己的个人博客之：Hexo版</a></li>
<li><a target="_blank" rel="noopener" href="https://www.bilibili.com/video/BV1q4411i7gL">手把手教你从0开始搭建自己的个人博客之：Hugo版</a></li>
<li><a target="_blank" rel="noopener" href="https://www.bilibili.com/video/BV12E41127Uj">手把手教你从0开始搭建自己的个人博客之：Wordpress+Docker版</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/DrEc8FqycC15hp2X010wxQ">建站神器：Hexo+Kaze+Gitee！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/JTTUYJTvtdT6X2fvLUBFZg">Win10下Hexo博客搭建教程及阿里云服务器部署实战</a></li>
</ul>
<h2 id="开源项目"><a href="#开源项目" class="headerlink" title="开源项目"></a>开源项目</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ojGRSWSaJutAsBC0i5_6jA">开源协议：开源软件的许可协议，先了解一下</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/5Ar5B9Ah2BdO8i9YjMQ7Qg">Java开源项目：看完这篇，别人的Java开源项目结构应该能看懂</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/PmxVlkI9LUmnqqSk0Frqeg">Java开源项目：Java领域学习和练手的开源项目分享：第一弹</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/y59hmDbQj1QglVj90viZqw">Java开源项目：Java领域学习和练手的开源项目分享：第二弹</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/jjugnXIr3G0u7i9krbmmqg">Java开源项目：Java领域学习和练手的开源项目分享：第三弹</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/bRNiqhZZXaoRwPEt8GIpLg">C&#x2F;C++开源项目：几款适合初学者学习和练手的C&#x2F;C++开源项目</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/fNgOqKlITKa4yTbULO2Atw">C&#x2F;C++开源项目：几款适合进阶学习和练手的C&#x2F;C++开源项目</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/I9lr_SEg70OO_v-GOIUgjQ">人工智能开源项目：AI领域几款标杆开源项目大巡礼</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Fu4OMojTJK0MrZohsLOx4w">Python开源项目：几个炫酷的Python开源项目</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/eWN7I8eHGE2exrdF3xziIA">读源码的7大心得总结</a></li>
</ul>
<!-- div:right-panel -->

<h2 id="实际项目需求和问题例析"><a href="#实际项目需求和问题例析" class="headerlink" title="实际项目需求和问题例析"></a>实际项目需求和问题例析</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/gqvgysyGcP3yr0of_GwaTw">实践案例：实际项目业务接口的幂等性问题</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/KPUuCU-q1SqnHzeyQeQzhw">实践案例：URL短链接服务如何设计</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/A-ZwcxlkB7Groe4k4Vq1Ew">实践案例：亿行数据超大文件如何高效导入生产数据库</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/-3g1ljoIrYWhhTHTF2RmLw">实践案例：订单系统一般怎么设计</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/EplL3kBx5vOXGDhDOP8NjQ">实践案例：百亿级数据分表后如何分页查</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/-8xYoAkBUoavcSl69I0XJw">实践案例：线上服务的YGC问题排查例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Sjh9qFPKF250vLQGZig6nw">实践案例：线上服务的FGC问题排查例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/VjBiUmQNQPpSHeSVjK1C2A">实践案例：一个小团队的微服务架构改造之路</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/MA7FVeJDMg8WDJABiBWpBA">实践案例：一个遗留项目的SQL优化实战录</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/OhkdQJ10biLOIezXc_vhkA">实践案例：分布式锁使用不当导致的业务损失例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/0p44f213fYdtr5LPJlrfLQ">实践案例：定时任务的几种简单方案</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/3zXdH2MALmWj57MWt0dImw">实践案例：项目常用的6种URL去重方案汇总</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/pg6lyAkgAaqSAZjiPgQTWA">实践案例：分布式系统架构的几个常见的坑</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/NJFJ5UrzGk0cMGL1oZe0Bg">项目架构科普：企业里常用的软件架构剖析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/kfhCEDSUGwnNUbtGDL_rvQ">项目架构科普：单体→分布式→微服务，这些年的软件架构是如何发育的</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Iy1dguNFkU73r1FxYIvlIQ">项目架构科普：微服务架构的全局图景分析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/fLLd-ml-gdo3-700iJso_A">原理解析：如何设计一个高并发的秒杀架构？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ZzxmDbs08waUCtO7PeUhqw">原理解析：高并发系统设计的常见问题小结</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/J0aSVry1-Ss1OTA-jQAX3w">原理解析：亿级流量网关设计思路</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Fd3cUDrqr0CsCl7FvZgd7Q">原理解析：实际网站用户密码是如何存储的</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Q1rZYvgklC_mBqfmIEC0Dw">原理解析：死磕搜索引擎背后的故事</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/1lG-aAyVycO4zTbOqdy6BA">原理解析：用微信扫码登录的背后发生了什么</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/RjVLsAhiMIYzsMhXJiReNg">原理解析：扫码付款背后的原理解析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/1b9jBfwM9_RLkMPquqAuMw">原理解析：收款码背后的原理剖析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Kske9ahRcIUM5XEs2ZIN3A">原理解析：支付掉单背后的几个问题</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/VROp_0M3mz5Zhhnz0ZSmKQ">原理解析：手机没网却能支付成功的背后原理</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/1FDb63R_OMbSJo9VOWSr3Q">原理解析：高并发场景下，先更新缓存还是先更新数据库？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/RDOKLnG7P1j5Ehu3EyrsCQ">原理解析：如何保证缓存和数据库的一致性问题？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/_56jq_p_nDUiBwaI2MTlmA">原理解析：什么是分布式事务？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/RViDM1WHE61SDLNKzUmTAg">原理解析：Redis分布式锁实践分析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/QgliAGeUAISQVR4VNWqdgA">原理解析：高并发下如何保证接口的幂等性？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/1VCC3i6ZCk7sb9kVRZ1czQ">原理解析：如何实现丝滑的数据库扩容</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/x1AobPWpMufNWqrBnc5sZg">原理解析：如何构建一个稳定的高性能Redis集群？</a></li>
<li>内容持续更新中…</li>
</ul>
<!-- panels:end -->

<hr>
<h1 id="面试准备和求职"><a href="#面试准备和求职" class="headerlink" title="面试准备和求职"></a><strong>面试准备和求职</strong></h1><hr>
<blockquote>
<p>[!NOTE]<br> 该板块会持续更新各技术方向的求职面试题集合、面经、以及一些小伙伴的求职心得与经历感悟。</p>
</blockquote>
<h2 id="简历相关"><a href="#简历相关" class="headerlink" title="简历相关"></a>简历相关</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/-qlU2-a-vvXWOHXzKHRm6A">资源下载 → 简历模板下载（word版）</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/q5gPSIiJqVvbI6Xa4dMXwA">程序员写简历时必须注意的技术词汇拼写</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/VJsp5SzGuOCGl-mWdbtCxQ">国内程序员最容易发音错误的单词集合</a></li>
</ul>
<h2 id="工作岗位科普"><a href="#工作岗位科普" class="headerlink" title="工作岗位科普"></a>工作岗位科普</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/LEWBkJ5wkAIIcuv98g1Yhg">科普：学C++的以后能从事哪些岗位</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/AtSMfjq0GXQdVxo2o6s3-g">科普：物联网行业的岗位、技能</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/EA_iYwpSIMQGgpCrvvVOzA">科普：学Linux的以后能做什么</a></li>
<li>持续更新中 …</li>
</ul>
<h2 id="面试题集合"><a href="#面试题集合" class="headerlink" title="面试题集合"></a>面试题集合</h2><!-- panels:start -->

<!-- div:left-panel -->

<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/7mx58Idw1pL0MjPIFBUB1Q">C&#x2F;C++：C语言&#x2F;C++基础面试知识大集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/BRQ-3uvstdZPO-cnLGCVzA">C&#x2F;C++：68道C语言&#x2F;C++常见面试题集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/p1zxnGVeTDJiyjgowRIoBA">Java：Java面试题硬核全梳理 ~</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/oBDrFnuk1lbfuNHkrhAC5w">Java：10道精选Java基础面试题集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/f-qIQGbzwHcW5Ur51rCqgg">Java：Java基础知识面试题大集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/si_V6J_6ZZn4Akc12mMk2g">Java：Java集合硬核面试50问（附答案）</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/bHkgpznnqixDNyDKwdAbOg">Java：面试必问的JVM GC机制精讲</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/T2DqgJ9-0QiRZQYUeR3c8w">Java：JVM虚拟机面试题大集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/XsZUF2nBUSEJoGIA8RimJw">Java：JVM垃圾回收硬核18问</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ZYoeC8yyfReEJDFSqiW8hw">Java：面试官常问的一些JVM面试题</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/pIVf97W4DuAPNxq6zgRvsQ">Java：Java并发和多线程基础面试题大集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ND-nUCGvXTHkEClKqN1qrQ">Java：面试常问的ThreadLocal源码剖析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/TF04dB-i0q0-dOTqlprmYA">Java：面试常问的线程池例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/kQ498ifh4OUEDd829JIhnQ">Java：面试常问的volatile剖析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/cnpfLL4TeL2oyEcHia6Bmg">Java：面试必问的ConcurrentHashMap精讲</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/lEgHPertXyguZIkv61LlKQ">Java：说说什么是Java内存模型</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/VXRRMabz_fvwnZeLWT-ybg">Java：浮点数精度问题面试例析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/lFnyBaaP3f0eNcKGW5RtCg">计网：面试最爱问的三次握手和四次挥手问题</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/PIGfhMaAx9R5C4x5eJQnIw">计网：计算机网络高频12问</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/H4gbg7bfnw61jZQcapTnMw">计网：GET和POST到底有什么区别</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/doxVJZ1G6187B4AOXb0JlA">计网：TCP&#x2F;UDP 部分高频面试题大集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/FJGKObVnU61ve_ioejLrtw">计网：HTTP常见面试题集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/t2Csrl7idUXISKW54cpV1g">计网：浏览器输入网址并回车，后面到底发生了什么</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/EZwOUGMrGKEF_POisJKmuw">计网：都说HTTP协议是无状态的，这里的「状态」到底指什么？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/lR_A3jbfRiRjchz_lyyKxw">操作系统：操作系统面试题集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/5f3ku77xSO8UlaOsTkOnHQ">操作系统：内存管理部分8个常见面试题汇总</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/oTEMOQY1xcG8uVceW-kLDA">操作系统：操作系统面试题大分享</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/3NI4FWuOfYMJBiKqqnpqMA">操作系统：面试常问的20个Linux命令</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/euzbHPpQG2BSKl93N5L1Hg">应用框架：Spring夺命连环10连问</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/q4CajkpSUC8TCgv55VK5aQ">应用框架：Spring 经典面试题大集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/cLh9xCDkVG0KV-uaX8PkNw">应用框架：Spring Boot基础面试题大集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/g0br3PfTmm8C_nkKbzE_ig">应用框架：Spring Cloud基础面试题大集合</a></li>
</ul>
<!-- div:right-panel -->

<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/vdOOVQtZhrJXsvRUjq0HqQ">数据库：MySQL面试硬核25问（附答案）</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/SPgtpfgv6bz2AfPa1CYYeQ">数据库：先更新数据库还是先更新缓存？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/RDOKLnG7P1j5Ehu3EyrsCQ">数据库：如何保证缓存和数据库的一致性问题？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/8ddEzG-NzzFD35ehvbER7A">数据库：面试官最爱的MySQL连环问</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/1VCC3i6ZCk7sb9kVRZ1czQ">数据库：如何实现丝滑的数据库扩容</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/WMuxdG3ymNMWWDk1XhLwZQ">数据库：数据库索引到底是什么</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/d7Zfat2fP6IX5DMKKtEIjQ">数据库：为什么MySQL索引要用B+ tree</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/-mOOchaXx_pKI6qWhohEnA">数据库：为什么用了索引，SQL查询还是慢</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/iBnav_WPrX5vjR-NbdNeQg">数据库：慢SQL背后的原理是什么</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/aBboeqEphejICklAKLqS2Q">数据库：30道保底的MySQL数据库面试题汇总</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/JQCtqM6aep3jtgiRL_9J5g">数据库：用心整理的9道MySQL面试题</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/lxMP4-Z3DzQg5fRqLs9XNA">中间件：面试官爱问的Redis高频面试题集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/6NobACeeKCcUy98Ikanryg">中间件：Redis面试全攻略、面试题大集合</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/m9trzqE3Zd0KHC1cA3PlZQ">中间件：什么是缓存穿透、缓存雪崩、缓存击穿？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/0R0Evh1QX5BPOQt9233vpQ">中间件：说说为什么Redis能这么快？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/x1AobPWpMufNWqrBnc5sZg">中间件：如何构建一个稳定的高性能Redis集群？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/aNdWL3xKtjOd_briXL6Bjg">中间件：把Redis当作队列来用，真的合适吗？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/RViDM1WHE61SDLNKzUmTAg">中间件：Redis分布式锁的详细分析</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ir0uurwo95hB3g__vTceJQ">中间件：ZooKeeper面试十二连问</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/xpSel2nsLkf3yck5edNMJQ">中间件：消息队列面试连环问总结</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/o-rqnOH4FHeHaz0VqoHnFg">中间件：Kafka面试要点梳理</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/iTnKumgre3SzrBuWf8KB6g">中间件：说说你对RPC技术是怎么理解的？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/wM0Vj_YMh7881NwK-AwKSw">中间件：后端岗面试必备之Dubbo九连问</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/VR1jEhJVXCfja3Pmo_kKkw">中间件：为什么Nginx能轻松撑起几万并发？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/NJFJ5UrzGk0cMGL1oZe0Bg">系统架构：企业里常用的软件架构科普</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/kfhCEDSUGwnNUbtGDL_rvQ">系统架构：单体→分布式→微服务，这些年的软件架构是怎么发展的</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/fLLd-ml-gdo3-700iJso_A">系统架构：如何设计一个高并发的秒杀架构？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/pg6lyAkgAaqSAZjiPgQTWA">系统架构：分布式架构的几个常见的坑</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/8CvoGCtGDvMHR91Lx89pxQ">系统架构：说说分布式架构负载均衡的几种方式</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/_56jq_p_nDUiBwaI2MTlmA">系统架构：说说什么是分布式事务？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/J0aSVry1-Ss1OTA-jQAX3w">系统架构：亿级流量网关的设计思路</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ZcKqGT2Sn4wVScExSF9Alg">设计模式：说说Spring用到了哪些设计模式？</a></li>
</ul>
<!-- panels:end -->

<h2 id="求职经历分享"><a href="#求职经历分享" class="headerlink" title="求职经历分享"></a>求职经历分享</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/joFBDntI9PmyVRiKPHwpRg">小伙伴经历分享：Linux后台开发该如何准备</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/V0nRwXQlkNBnBneERZQURQ">二本无实习上岸滴滴京东58复盘(一)</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/BnbBQGL-S2sGdRtNh7DN1A">二本无实习上岸滴滴京东58复盘(二)</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/3YfKHo2lW-NC1tEA_u-mlQ">小伙伴面经分享(一)：深信服(含答案)</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/sc-7rc6obYZNFcc1mjNPAg">小伙伴面经分享(二)：京东(含答案)</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/jAPYcMULqQl6AE_Vv7BZhQ">一位程序媛的秋招软件开发岗面试经历</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/0RoFVAezxW8cl3bjlAHbQg">写简历→面试→谈薪：一绿向北</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/4L3J45Wj81yjoZIQ3ZVSog">小红书后台开发岗面试经历复盘~</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/34SdkDyMvpVmoCFEB4UF-g">国企和银行：面试都问些啥？如何准备？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/4hP8s7TzsOv_tdQtOdCdig">招银网络（银行科技岗）面试都问了些啥？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/jy0g3ohLzbtD-6JeCeMVvw">准备提前批？还是去实习？还是准备秋招？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/9Fb8w2XwkXQpj8agBtdmFg">7面Google，面经分享</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/j6poLkiomb80jTE7EaFVJA">化学专业大二转码的抉择之路</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/-27fvvzBpmwwuAFANRoeIA">拿到腾讯实习Offer的经历分享</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/YP4qafQ8gPbB7W0CkfACug">怎么准备国企和银行？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/u_jIpGfmH4BHYS7hIlQk9w">去银行当程序员是一种什么体验</a></li>
</ul>
<h2 id="城市-x2F-公司选择"><a href="#城市-x2F-公司选择" class="headerlink" title="城市&#x2F;公司选择"></a>城市&#x2F;公司选择</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/VFocc914mGTrDzodI-MF1A">一二线城市知名IT互联网公司总名单</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/5gtu7B05EKbPDXvhha5uNQ">常见互联网公司职级和薪资一览</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/wvdzBTcLLaeEtCqZI6T_Qg">常见互联网公司时薪排行榜</a></li>
</ul>
<hr>
<ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/UDWHt3QwsZBfZ25-pddwhQ">成都有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/bjHmAtPrSKQCDjfr9Mu0_Q">武汉有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/kskE2wJx_QtT6vCgsrUgIA">南京有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/tBNWFJbkjkV0bEPh4t9VQg">合肥有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/dtJBi4QXXTrGkKTPM0y7VA">深圳有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/t4L45znsZRmWQ7MIQQtvhg">成都有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/eD3tjUC4qASHH0WSWhz57Q">西安有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/UQHJ-iZDvQb3RLwQsELbUQ">长沙有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/6dh1jbmuDqnHBoM7beTQbg">武汉有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Ks9XLLUh099wSHWG0OBf1g">天津有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/8-uZUrG8_ziR5tKl1K8YNw">郑州有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Bwu0MDQhZiaY0vj3HsEsLg">杭州有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/s5UhdFyj9-8bqwQyZUMvVA">广州有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Miu3eC6hqJlK8fi8Qr-DtQ">青岛有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/zYI8qW3Zfu2ySeO-PDqwZA">上海有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/12inr2oRTULf7NhYOBGMYw">大连有哪些知名的IT&#x2F;互联网公司？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/529Zv24uToDW4xxEOFdiqw">苏州有哪些知名的IT&#x2F;互联网公司？</a></li>
</ul>
<h2 id="其他求职相关问题"><a href="#其他求职相关问题" class="headerlink" title="其他求职相关问题"></a>其他求职相关问题</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/QUJzl1ZG77DDnQNK0OAsHg">为什么有些大公司技术却弱爆了？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/iV7DMApxhEw5YL-upIowVA">嵌入式行业到底有没有搞头？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/9XMAvP_t0B1Ev57-ZC42yw">找工作时，公司所说的「给期权」到底是什么东西？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/cu7mDeU2q2uEG8Q0CPzDEA">入职一家公司，应该选择新业务还是老业务？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/NGJc71cW2TKEONe6jhIUSg">采访了一位技术总监：聊了聊跳槽的心态问题</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/4_MB3L511h7qoXNxPRdOvQ">程序员从技术→管理，要走哪些路？</a></li>
</ul>
<hr>
<h1 id="视频教程推荐"><a href="#视频教程推荐" class="headerlink" title="视频教程推荐"></a><strong>视频教程推荐</strong></h1><hr>
<blockquote>
<p>[!NOTE]<br> 对于学习编程的小伙伴来说，网上有海量现成的宝贵视频学习资源可供食用。<br> 所以该板块会持续甄选和更新互联网上那些优秀的、值得反复观看的技术视频教程。</p>
</blockquote>
<hr>
<!-- tabs:start -->

<h4 id="数据结构和算法"><a href="#数据结构和算法" class="headerlink" title="数据结构和算法"></a><strong>数据结构和算法</strong></h4><hr>
<blockquote>
<ul>
<li><strong>《郝斌 数据结构入门》</strong></li>
</ul>
</blockquote>
<p align="center">
<iframe src="//player.bilibili.com/player.html?aid=6159200&bvid=BV11s41167h6&cid=10001692&page=1&as_wide=1&high_quality=1&danmaku=1" allowfullscreen="true" width="100%" height="450" scrolling="no" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"></iframe>
</p>

<hr>
<blockquote>
<ul>
<li><strong>《数据结构-浙江大学》</strong></li>
</ul>
</blockquote>
<p align="center">
<iframe src="//player.bilibili.com/player.html?aid=18586085&bvid=BV1JW411i731&cid=30323260&page=1&as_wide=1&high_quality=1&danmaku=1" allowfullscreen="true" width="100%" height="450" scrolling="no" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"></iframe>
</p>

<hr>
<blockquote>
<ul>
<li><strong>《数据结构与算法基础（青岛大学-王卓）》</strong></li>
</ul>
</blockquote>
<p align="center">
<iframe src="//player.bilibili.com/player.html?aid=82837069&bvid=BV1nJ411V7bd&cid=141710539&page=1&as_wide=1&high_quality=1&danmaku=1" allowfullscreen="true" width="100%" height="450" scrolling="no" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"></iframe>
</p>

<hr>
<blockquote>
<ul>
<li><strong>《尚硅谷 Java数据结构与算法）》</strong></li>
</ul>
</blockquote>
<p align="center">
<iframe src="//player.bilibili.com/player.html?aid=54029771&bvid=BV1E4411H73v&cid=261675748&page=1&as_wide=1&high_quality=1&danmaku=1" allowfullscreen="true" width="100%" height="450" scrolling="no" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"></iframe>
</p>

<h4 id="计算机网络-1"><a href="#计算机网络-1" class="headerlink" title="计算机网络"></a><strong>计算机网络</strong></h4><hr>
<blockquote>
<ul>
<li><strong>《计算机网络微课堂》</strong></li>
</ul>
</blockquote>
<p align="center">
<iframe src="//player.bilibili.com/player.html?aid=64605483&bvid=BV1c4411d7jb&cid=112161859&page=1&as_wide=1&high_quality=1&danmaku=1" allowfullscreen="true" width="100%" height="450" scrolling="no" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"></iframe>
</p>

<hr>
<blockquote>
<ul>
<li><strong>《2019 王道考研 计算机网络》</strong></li>
</ul>
</blockquote>
<p align="center">
<iframe src="//player.bilibili.com/player.html?aid=70228743&bvid=BV19E411D78Q&cid=121579556&page=1&as_wide=1&high_quality=1&danmaku=1" allowfullscreen="true" width="100%" height="450" scrolling="no" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"></iframe>
</p>

<hr>
<blockquote>
<ul>
<li><strong>《韩立刚 计算机网络》</strong></li>
</ul>
</blockquote>
<p align="center">
<iframe src="//player.bilibili.com/player.html?aid=415599826&bvid=BV1gV411h7r7&cid=262615706&page=1&as_wide=1&high_quality=1&danmaku=1" allowfullscreen="true" width="100%" height="450" scrolling="no" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"></iframe>
</p>

<hr>
<blockquote>
<ul>
<li><strong>《计算机网络（谢希仁第七版）-方老师》</strong></li>
</ul>
</blockquote>
<p align="center">
<iframe src="//player.bilibili.com/player.html?aid=421258608&bvid=BV1H3411y7q6&cid=430413734&page=1&as_wide=1&high_quality=1&danmaku=1" allowfullscreen="true" width="100%" height="450" scrolling="no" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"></iframe>
</p>

<hr>
<h4 id="操作系统-1"><a href="#操作系统-1" class="headerlink" title="操作系统"></a><strong>操作系统</strong></h4><blockquote>
<ul>
<li><strong>《2020 南京大学  操作系统：设计与实现 (蒋炎岩) 》</strong></li>
</ul>
</blockquote>
<p align="center">
<iframe src="//player.bilibili.com/player.html?aid=89733537&bvid=BV1N741177F5&cid=153258157&page=1&as_wide=1&high_quality=1&danmaku=1" allowfullscreen="true" width="100%" height="450" scrolling="no" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"></iframe>
</p>

<hr>
<blockquote>
<ul>
<li><strong>《操作系统（哈工大李治军老师）》</strong></li>
</ul>
</blockquote>
<p align="center">
<iframe src="//player.bilibili.com/player.html?aid=51437944&bvid=BV1d4411v7u7&cid=90016520&page=1&as_wide=1&high_quality=1&danmaku=1" allowfullscreen="true" width="100%" height="450" scrolling="no" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"></iframe>
</p>

<h4 id="计算机组成原理"><a href="#计算机组成原理" class="headerlink" title="计算机组成原理"></a><strong>计算机组成原理</strong></h4><hr>
<blockquote>
<ul>
<li><strong>《计算机组成原理（哈工大刘宏伟）》</strong></li>
</ul>
</blockquote>
<p align="center">
<iframe src="//player.bilibili.com/player.html?aid=51650260&bvid=BV1t4411e7LH&cid=90407902&page=1&as_wide=1&high_quality=1&danmaku=1" allowfullscreen="true" width="100%" height="450" scrolling="no" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"></iframe>
</p>

<h4 id="编译原理"><a href="#编译原理" class="headerlink" title="编译原理"></a><strong>编译原理</strong></h4><hr>
<blockquote>
<ul>
<li><strong>《编译原理（哈工大）》</strong></li>
</ul>
</blockquote>
<p align="center">
<iframe src="//player.bilibili.com/player.html?aid=17649289&bvid=BV1zW411t7YE&cid=28812645&page=1&as_wide=1&high_quality=1&danmaku=1" allowfullscreen="true" width="100%" height="450" scrolling="no" frameborder="0" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"></iframe>
</p>

<h4 id="更多敬请期待…"><a href="#更多敬请期待…" class="headerlink" title="更多敬请期待…"></a><strong>更多敬请期待…</strong></h4><hr>
<p>更多的视频教程资源会持续更新，敬请期待…</p>
<!-- tabs:end -->

<hr>
<h1 id="资源汇总和下载"><a href="#资源汇总和下载" class="headerlink" title="资源汇总和下载"></a><strong>资源汇总和下载</strong></h1><hr>
<blockquote>
<p>[!NOTE]<br> 该版块会持续更新那些优秀的编程资源，<strong>包括但不限于：</strong>各种硬核的PDF笔记、软件包、技术手册、自制文档、题解解析、简历模板、面试题文档 等等。</p>
</blockquote>
<hr>
<h2 id="编程学习资源大整理"><a href="#编程学习资源大整理" class="headerlink" title="编程学习资源大整理"></a>编程学习资源大整理</h2><p>前段时间我花了大把力气，把自用的编程学习资源做了个大整理。</p>
<p>都是纯肝货，目录如下，有需要的可以自取。</p>
<p><img src="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/rescollection.2twl61h5k0s0.jpeg"></p>
<ul>
<li>下载链接：<a target="_blank" rel="noopener" href="https://pan.baidu.com/s/1jEjcF96iVAXEXaadE1V6RQ">https://pan.baidu.com/s/1jEjcF96iVAXEXaadE1V6RQ</a></li>
<li>提取码：f23d</li>
</ul>
<h2 id="PDF干货笔记下载"><a href="#PDF干货笔记下载" class="headerlink" title="PDF干货笔记下载"></a>PDF干货笔记下载</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/EaDLaLy3YjrNiSoNofwMMA">下载 → LeetCode算法刷题Golang版答案PDF文档</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/qR6KTfldk41lsOj1Ghp6Og">下载 → LeetCode算法刷题C++版答案PDF文档</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/kWTJ9640mPegr5wqVE0GMg">下载 → LeetCode算法刷题Java版答案PDF文档</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/gXH98f1p5cCYVETCn9w9kA">下载 → 谷歌学长的数据结构+算法题代码笔记手册</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/JUJ6qu_ec3s1JmTxQt_V3g">下载 → 再肝两夜，写了个「服务器项目部署」实战PDF手册</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/YNOZSQ5smo1uGE5ZttUZ_w">下载 → 熬10天夜，肝出了这个PDF版「软件安装手册」</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/GJYVt376C_g4406ux5uw0Q">下载 → 熬了7天夜，羊哥肝了个Linux速查备忘手册！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/x9E7ogAxFNpODXkAXCZZ3w">下载 → Java后端开发学习路线+知识点梳理总结</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/xUKlD-Ro4x55NfANAwxJUw">下载 → 前端开发学习路线+知识点梳理总结</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/vBCwU-BCsGVNpjJM__LheQ">下载 → 大数据开发学习路线+知识点梳理总结</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/nkBsUgbuMK3ArHfFc2417w">下载 → 嵌入式开发学习路线+知识点梳理总结</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ac8vgjob8nDqM1Q7FGLRiA">下载 → C&#x2F;C++后台开发学习路线+知识点梳理总结</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/EKBRCNr_3n0y8CCSUNPdPg">下载 → 找工作简历模板集(word格式) </a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/q5gPSIiJqVvbI6Xa4dMXwA">下载 → 程序员写简历时的技术词汇拼写规范PDF手册</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/jn7oraFlhRkOmiv3rh74WA">下载 → Java基础核心知识大总结PDF文档</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/BRQ-3uvstdZPO-cnLGCVzA">下载 → C&#x2F;C++常见面试题（含答案）PDF文档</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/miV4SH1Eb_FMogQ2XYvPuA">下载 → 设计模式学习笔记PDF文档</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/EGQAuvITVJT3fZUdQG84sw">下载 → Java多线程+并发编程知识点详细总结PDF</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/J-vlX5tIuXWdglXWewK0FQ">下载 → 阿里Java开发手册PDF全套</a></li>
</ul>
<h2 id="其他资源下载"><a href="#其他资源下载" class="headerlink" title="其他资源下载"></a>其他资源下载</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/XUHnLCbq7mDWhOc9imTVzg">下载 → 我的浏览器收藏夹大公开（附浏览器收藏夹书签下载）</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/xDYSG4uDz9rgNCuk0RxLjg">下载 → 豆瓣9.1分的Pro Git学习手册YYDS！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/3rV556_0piRNsSpDYwuZ8g">下载 → 《Linux命令行大全》.pdf手册</a></li>
</ul>
<hr>
<h1 id="编码之外"><a href="#编码之外" class="headerlink" title="编码之外"></a><strong>编码之外</strong></h1><hr>
<blockquote>
<p>[!NOTE]<br> 诚然，程序员应该重视代码，但眼里也不应该只有代码，很多代码之外的东西也很精彩。工作也是为了更好的生活，多看看身边的事，多关心身边的人，终究我们还是要回归到平凡的生活中。</p>
<p> <strong>我们所热爱的，就是自己的生活！</strong></p>
</blockquote>
<hr>
<h2 id="码农生活"><a href="#码农生活" class="headerlink" title="码农生活"></a>码农生活</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/zRU-n-5VOgrMqG09477RyQ">办公室划水？嘿嘿，这事我擅长…</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/7_2ibVNVMZLEYl89zT7sGQ">戴着耳机敲代码，我都听些啥？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/1dJO8VJ6GaZykv33IUslkw">程序员猪队友行为大赏，你遇到过哪些？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/f8KtgdRx6ATbR-4RY_I_aA">写给程序员看的买房+考公务员攻略</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/9fyrQPqfXx2bhbXjyYdnaw">毕业租房避坑攻略（含购物清单）</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/oCQWlUkQ7ezgtYdono3BzA">加班严重时该如何自我提升？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/SclEMeRJTqSVq-HsXaLNTQ">在腾讯待了9年还离了职</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/AFnB33Rs7ahbjiX1CqfccQ">聊一聊自学计算机的辛酸史</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/-vBrii3kn5lNn0Bj4rzAdg">一个算法工程师的日常</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/3Vf49cYXfwp6znt_SJhgsg">测试岗与开发岗的那些爱恨情仇</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/NGJc71cW2TKEONe6jhIUSg">采访了一位技术总监：聊了聊跳槽的心态问题</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/rMqSG84kNtLJ5Oiwk-S7Qw">这就是架构师一天的生活，还羡慕不？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/vI7EGqo7YbljRdZn2nUSMQ">程序员是如何玩浪漫的？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/AE8dGz9asZ1de2-kvCiZwQ">假如曹操是一名程序员，你猜怎么着？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/yE_fShdcgE1e1bnpHiLWyA">周末无聊，我都逛哪些资讯类网站充电呢？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/dj3Z8-kgpCzzc-bQQgg__g">亲历分享：一行代码，百万人民币打水漂</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/4_MB3L511h7qoXNxPRdOvQ">程序员从技术→管理，要走哪些路？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/wd9QkLsrygO8ADW6heJg8w">IT领域的2&#x2F;8法则，扎心了</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Gy-Qs80rHKDJwapCmYGGEg">周一划水必备：程序员专属GIF动图批发</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/9DxslnAKgBHG85iZ8m6yYQ">521坦白帖：当年念书时是怎么写情书的？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/xfKoK3cQvcz-WGh50LiSBg">一位半路转行计算机的女生</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/dW81quoXMRA2ObwTzIv74g">程序员界的孔乙己</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/x9EEDlGNIOPOL3v_qZiiAQ">我的大学四年收获及工作感悟</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/g5nb-yti5bv9_OCRqIjFCQ">离职后，华为的哪些东西是自己最留恋的？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Dk-9se1eFl44NdmWB_sFOQ">华为最美小姐姐，被外派到墨西哥后…</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/HrSitzmxTxWw4atXQHCa_A">我在南大的七年</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/gknm-6k1zLY-1Cey12whSw">垃圾领导把我的功劳全抢走了！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Rc2_rR9rJ7tx_LO_q80zuQ">用随机梯度下降法来优化自己的人生！！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/gJby-f46_hv5Wjk3Eu5iaw">美团大佬分享：写给工程师的几条精进建议</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/yhY1VfuCEB0DSWYtBzMKDA">我，生物专业出身，自学转到了互联网</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/jboZwMaxfs1mOdf5mxPbeA">坦白贴：十一在家我都逛哪些技术网站？</a></li>
</ul>
<h2 id="读研深造"><a href="#读研深造" class="headerlink" title="读研深造"></a>读研深造</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/6h8GIqCdqs0pkNuwR-M7Yg">整整5年了！老羊斗胆聊一聊和自己导师的相处</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/cgtbhh7lrhsHXquFz7d1Ow">学弟跨考浙大计算机的掏心窝子分享！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/_Kt9OmaBVDDj6S7rsdC-Aw">既然硕士毕业也去搞开发，那我还读个喵的研？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/kbRlOB9hdU4j54VGF1s8oQ">一篇所有研究生都该读的好文：阳光温热，科研静好！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/gbIGNXIkOpw8tQ5aIoJMtw">如何优雅地向老师表达我这周任务没啥进展？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/OkxMe3Eaywx-KF9tBmjf-Q">好不容易读个研，遇到放羊的导师怎么办？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/MvZFLDHItPR7InzrtYRL5w">研究生&#x2F;专升本都扩招，我们没有理由放弃</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Oa-1F1h6FmgodjG__2AZ_Q">本科、硕士、博士，究竟有何区别？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/h6o5XpA8-M97MWILhdrO5A">一位博士的自白：毕业时想大哭一场</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/EhWWnpLuhLM3_lX8Ja3qMQ">一个农村博士的独白：全家为什么只有我读到了博士</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/hDR4FKDA4Hkc_yvXgyvI8A">考研上岸哈工大的经历分享</a></li>
</ul>
<h2 id="闲聊唠嗑"><a href="#闲聊唠嗑" class="headerlink" title="闲聊唠嗑"></a>闲聊唠嗑</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/AAMmLDeZSLPkKzzGrkHd9g">深夜闲聊：还敢无脑梭哈计算机么？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/xweKJoGKG5NUssZioROQZw">那些学计算机的女生后来都怎么样了？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/UT1muuGblZ6hFvLViti6OQ">程序员缺乏经验的7种表现</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/oKFHpaItmlB57gCE0sbzig">程序员的酒后真言，都不容易</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/1AabNVmQTyhlEnaghoyGOg">自学技术时，看书还是看视频？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/7oOoThASit_ipIgyYzuMfA">学校出身一般，该怎么办</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/8zP5DX79-aEuFF17MYnHtg">如何写出让同事无法维护的代码？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/bj6LG7bq1Og8-fplcLjROA">六成大学生认为自己毕业10年内会年入百万？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/bWcoi4oEIq6_F_NSkO7lOA">拼多多和电网offer，要你会选哪个？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/Bhj0hj43jW7Ua78QENeC1g">C语言，50岁了！永远滴神！</a></li>
</ul>
<h2 id="读书写作"><a href="#读书写作" class="headerlink" title="读书写作"></a>读书写作</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/rk0eOgioOj7yw3EjfTt5zQ">羊哥今年的闲读书单！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/40nmWT6DtPqcqblQuwv9Tw">大公开：我技术文章里的动图是怎么做的？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/T-b7GfBoMGRuOqtp3T_HaA">坚持写博客三年了，分享几个私藏小工具</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/UU4Ha5bym4VhEDAlMZwVFQ">白瞟七牛云作为个人博客免费图床</a></li>
</ul>
<hr>
<ul>
<li><a target="_blank" rel="noopener" href="https://www.processon.com/">在线画图工具ProcessOn</a></li>
<li><a target="_blank" rel="noopener" href="https://app.diagrams.net/">在线画图工具Draw.io</a></li>
<li><a target="_blank" rel="noopener" href="http://www.mindline.cn/webapp">在线思维导图工具MindLine</a></li>
<li><a target="_blank" rel="noopener" href="https://www.eteste.com/">在线字数统计工具</a></li>
<li><a target="_blank" rel="noopener" href="https://mdnice.com/">mdnice markdown排版工具</a></li>
<li><a target="_blank" rel="noopener" href="http://md.aclickall.com/">md2all markdown排版工具</a></li>
<li><a target="_blank" rel="noopener" href="https://carbon.now.sh/">在线代码截图工具</a></li>
</ul>
<h2 id="摸鱼时间"><a href="#摸鱼时间" class="headerlink" title="摸鱼时间"></a>摸鱼时间</h2><p>咳咳。。。</p>
<ul>
<li><a target="_blank" rel="noopener" href="https://www.bilibili.com/">0x00000001</a></li>
<li><a target="_blank" rel="noopener" href="https://mo.fish/">0x00000002</a></li>
<li><a target="_blank" rel="noopener" href="http://www.mazegenerator.net/">0x00000003</a></li>
<li><a target="_blank" rel="noopener" href="https://duomoyu.com/">0x00000004</a></li>
<li><a target="_blank" rel="noopener" href="http://slither.io/">0x00000005</a></li>
<li><a target="_blank" rel="noopener" href="https://www.anyknew.com/#/">0x00000006</a></li>
<li><a target="_blank" rel="noopener" href="http://gogoame.sumbioun.com/">0x00000007</a></li>
<li><a target="_blank" rel="noopener" href="https://flipanim.com/">0x00000008</a></li>
<li><a target="_blank" rel="noopener" href="https://zty.pe/">0x00000009</a></li>
<li><a target="_blank" rel="noopener" href="https://aidn.jp/mikutap/">0x0000000a</a></li>
<li><a target="_blank" rel="noopener" href="http://zoomquilt.org/">0x0000000b</a></li>
<li><a target="_blank" rel="noopener" href="https://lab.bangbang93.com/wsyw">0x0000000c</a></li>
<li><a target="_blank" rel="noopener" href="https://lmbtfy.cn/">0x0000000d</a></li>
<li><a target="_blank" rel="noopener" href="https://suulnnka.github.io/BullshitGenerator/index.html">0x0000000e</a></li>
<li><a target="_blank" rel="noopener" href="https://zzkia.noddl.me/">0x0000000f</a></li>
<li><a target="_blank" rel="noopener" href="https://www.dgtle.com/">0x00000010</a></li>
<li><a target="_blank" rel="noopener" href="https://sspai.com/">0x00000011</a></li>
</ul>
<hr>
<h1 id="联系作者"><a href="#联系作者" class="headerlink" title="联系作者"></a><strong>联系作者</strong></h1><hr>
<h2 id="关于作者"><a href="#关于作者" class="headerlink" title="关于作者"></a>关于作者</h2><ul>
<li>普通开发者，热情的学习者，狂热的数码迷</li>
<li>90后，硕士毕业于华中科技大学电信专业，现从事IT类工作</li>
<li>目前在南京栖息，天天被业务折腾得死去活来的同时依然保有对各项技术热忱的追求</li>
<li>参加工作以后越来越理解交流与分享的重要性，我在不停地汲取大家宝贵经验的同时，也想回馈自己的所学所感给读者</li>
<li>本站是作者自学编程以来所用资源和分享内容的聚合，旨在为编程自学者提供一系列清晰的学习路线&#x2F;靠谱的资源&#x2F;高效的工具&#x2F;务实的技术文章，方便自己也方便他人。网站内容会保持持续更新，欢迎收藏品鉴</li>
</ul>
<hr>
<h2 id="心路历程"><a href="#心路历程" class="headerlink" title="心路历程"></a>心路历程</h2><ul>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/GPVeZtMokBI_LwmcM5XEtA">2021-10-14：我坚持两年了！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/rk0eOgioOj7yw3EjfTt5zQ">2021-09-12：羊哥今年的书单！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/gU5jhu9wcZHTgGuawpKE8g">2021-08-29：读了7年通信最后还是转了码，羊哥你后悔吗？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/yhOep3tFNpJ5-4YkDigVxw">2021-08-05：羊哥竟然翻出了当年的大学成绩单。。</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/OQ5dNnxFKXVt7rgRxxygyw">2021-07-16：羊嫂偷偷抹了两个小时眼泪</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/AAMmLDeZSLPkKzzGrkHd9g">2021-06-23：还敢无脑梭哈计算机么？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/oqopuK0mMP-FAxiDvPUeCg">2021-06-17：羊家坝村首席高考志愿填报推荐官</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/8CxIPP2Amb3HXPY7hKUWGA">2021-06-13：羊哥接到了百万大V的邀请！起飞了~</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/6h8GIqCdqs0pkNuwR-M7Yg">2021-06-06：整整5年了！老羊斗胆聊一聊和自己导师的相处</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/-Xp84QH5zQvvHaGWTJF9MA">2021-05-27：拜访了这位小哥的GitHub后，羊哥失眠了</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/9DxslnAKgBHG85iZ8m6yYQ">2021-05-21：521坦白帖：当年念书时是怎么写情书的？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/q-fHPCz9YQzVDC4wC9P4YA">2021-05-09：卧槽，人品爆了 …</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/sYPGrLBhojhqIkVAKXLZNg">2021-05-05：生产队的驴都不敢这么过五一</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/EfYQgGxOYUb6mLs4EBuCCw">2021-04-24：日子浑浑噩噩地过，这可能是我最开心的一周了</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/VqVFhueNtm9jN1GrW4Ebsg">2021-03-28：痴声痴色痴梦痴情几辈痴人</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/KTD15ZQ4xdTJXt-MVWa7zg">2021-03-21：我和羊嫂的3平米小书房</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/-Odh3JZNzJzGLGLiCf_uzw">2021-02-28：哎，我也想有一个这样的老婆啊</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/B9iPfm4DVAwHR1e-wWNPOg">2021-01-14：熬夜多疯狂，体检报告就有多刺激！我怂了</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/v1TiNA7XJeMp92u-YLLxjg">2021-01-10：去芜湖、看房子、拿体检报告，魔幻的2021开端~</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/lfm_y0WskLrQJc55JYdu2Q">2020-12-13：今天的南京，很冷很冷</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/WDatlUIMnADEASTzBTQZQw">2020-10-22：和字节跳动面试官学长聊了聊人生~</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/ukyCJTXeD9ZoSaNK-WV0Ig">2020-10-15：愿那只在天堂的猫，能够被温柔相待</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/9hw1FTUGZANgcecCFUDovQ">2020-10-06：老家被拆了，我的少年记忆也无处安放了</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/QHvFgYQLvTrwAsxdWe_eAQ">2020-09-06：没有什么事是一顿撸串解决不了的~</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/kXjD-lIZpVjSroKkGHA7SQ">2020-08-08：实不相瞒，我就是鹤岗的女婿~</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/FlnZuzmZ9eNK1ahkvC98CA">2020-07-18：最近厚着脸皮联系了不少同学</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/-mFZnE8-DNG6XVM-t589-Q">2020-07-03：自学党&#x2F;野生猿，项目经验上哪搞？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/_Kt9OmaBVDDj6S7rsdC-Aw">2020-06-21：既然硕士毕业也去搞开发，那我还读个喵的研？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/0iSzqJBj7YHkijGxbFUqCQ">2020-06-14：我的毕业季，没有一点点仪式感</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/C9HuUYis2zu6ThJAjXRqpA">2020-05-08：最近状态不咋好…</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/gOo8ztVLdXp3m_rvBozQpQ">2020-05-01：二线城市的程序员活得好吗？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/r_vm7lA2Ul_ZFhkx60wplg">2020-04-21：自学编程的八大误区！克服它！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/t9F6Z-DrybWLUxVrPTRPJw">2020-04-08：我的本科回忆录：从迷茫自卑到保送华科</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/pwInIR-h1gkPXGuu4u1aWw">2020-03-15：到底要不要考研？</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/gJBlu5gXL5vqYWG6ggisRw">2020-02-23：实不相瞒，在家远程办公15天，我有点自闭</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/lfGqTBuyRSiA9NL-8Na-xg">2020-02-16：昨夜，我梦回武汉 . . .</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/FPreCde-JHl2D6HZDGK7qg">2020-02-02：转行的路，走起来其实有点累…</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/-RWgqMi2iKFUQGWbgyyo3w">2020-01-23：来B站一年，我活成了人的模样！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/i-EFuFb7yPpoOidme18EWA">2019-10-28：快30岁的我，终于赚到人生第一个10W！</a></li>
<li><a target="_blank" rel="noopener" href="https://mp.weixin.qq.com/s/TO9-kBWKFs2sV1z0Hw3qWw">2019-09-08：华科研究生学长想对导师们说的话！</a></li>
</ul>
<hr>
<h2 id="微信联系"><a href="#微信联系" class="headerlink" title="微信联系"></a>微信联系</h2><p align="left">
    <a href="https://mp.weixin.qq.com/s/ePhaYezFblgt0NgbvtWqww" target="_blank">
        <img src="https://cdn.jsdelivr.net/gh/justacoder99/r2coding@master/img/qrcode_for_gh_1537917051d0_258.nd3fymuhyts.jpeg" width=""/>
    </a>
</p>


<hr>
<h1 id="本站开源地址"><a href="#本站开源地址" class="headerlink" title="本站开源地址"></a><strong>本站开源地址</strong></h1><hr>
<h2 id="GitHub开源地址"><a href="#GitHub开源地址" class="headerlink" title="GitHub开源地址"></a>GitHub开源地址</h2><ul>
<li><a target="_blank" rel="noopener" href="https://github.com/rd2coding/Road2Coding">https://github.com/rd2coding/Road2Coding</a> <strong>欢迎Star支持</strong></li>
</ul>
<h2 id="Gitee开源地址"><a href="#Gitee开源地址" class="headerlink" title="Gitee开源地址"></a>Gitee开源地址</h2><ul>
<li><a target="_blank" rel="noopener" href="https://gitee.com/rd2coding/Road2Coding">https://gitee.com/rd2coding/Road2Coding</a> <strong>欢迎Star支持</strong></li>
</ul>
<hr>
<h1 id="持续更新中…"><a href="#持续更新中…" class="headerlink" title="持续更新中…"></a>持续更新中…</h1><p>网站内容会持续保持更新，欢迎收藏品鉴！</p>

      

      
    </div>
    <div class="article-info article-info-index">
      
      
      

      

      
        
<div class="share-btn share-icons tooltip-left">
  <div class="tooltip tooltip-east">
    <span class="tooltip-item">
      <a href="javascript:;" class="share-sns share-outer">
        <i class="icon icon-share"></i>
      </a>
    </span>
    <span class="tooltip-content">
      <div class="share-wrap">
        <div class="share-icons">
          <a class="weibo share-sns" href="javascript:;" data-type="weibo">
            <i class="icon icon-weibo"></i>
          </a>
          <a class="weixin share-sns wxFab" href="javascript:;" data-type="weixin">
            <i class="icon icon-weixin"></i>
          </a>
          <a class="qq share-sns" href="javascript:;" data-type="qq">
            <i class="icon icon-qq"></i>
          </a>
          <a class="douban share-sns" href="javascript:;" data-type="douban">
            <i class="icon icon-douban"></i>
          </a>
          <a class="qzone share-sns" href="javascript:;" data-type="qzone">
            <i class="icon icon-qzone"></i>
          </a>
          <a class="facebook share-sns" href="javascript:;" data-type="facebook">
            <i class="icon icon-facebook"></i>
          </a>
          <a class="twitter share-sns" href="javascript:;" data-type="twitter">
            <i class="icon icon-twitter"></i>
          </a>
          <a class="google share-sns" href="javascript:;" data-type="google">
            <i class="icon icon-google"></i>
          </a>
        </div>
      </div>
    </span>
  </div>
</div>

<div class="page-modal wx-share js-wx-box">
    <a class="close js-modal-close" href="javascript:;"><i class="icon icon-close"></i></a>
    <p>扫一扫，分享到微信</p>
    <div class="wx-qrcode">
      <img src="//pan.baidu.com/share/qrcode?url=http://example.com/2022/04/05/README/" alt="微信分享二维码">
    </div>
</div>

<div class="mask js-mask"></div>
      
      <div class="clearfix"></div>
    </div>
  </div>
</article>

  
<nav id="article-nav">
  
  
    <a href="/2022/02/20/markdown-test/" id="article-nav-older" class="article-nav-link-wrap">
      <div class="article-nav-title">markdown_test</div>
      <i class="icon-circle-right"></i>
    </a>
  
</nav>


<aside class="wrap-side-operation">
    <div class="mod-side-operation">
        
        <div class="jump-container" id="js-jump-container" style="display:none;">
            <a href="javascript:void(0)" class="mod-side-operation__jump-to-top">
                <i class="icon-font icon-back"></i>
            </a>
            <div id="js-jump-plan-container" class="jump-plan-container" style="top: -11px;">
                <i class="icon-font icon-plane jump-plane"></i>
            </div>
        </div>
        
        
    </div>
</aside>



  
  
  

  

  

  


          </div>
        </div>
      </div>
      <footer id="footer">
  <div class="outer">
    <div id="footer-info">
    	<div class="footer-left">
    		&copy; 2022 John Doe
    	</div>
      	<div class="footer-right">
      		<a href="http://hexo.io/" target="_blank">Hexo</a>  Theme <a href="https://github.com/litten/hexo-theme-yilia" target="_blank">Yilia</a> by Litten
      	</div>
    </div>
  </div>
</footer>
    </div>
    <script>
	var yiliaConfig = {
		mathjax: false,
		isHome: false,
		isPost: true,
		isArchive: false,
		isTag: false,
		isCategory: false,
		open_in_new: true,
		toc_hide_index: true,
		root: "/",
		innerArchive: true,
		showTags: false
	}
</script>

<script>!function(t){function n(e){if(r[e])return r[e].exports;var i=r[e]={exports:{},id:e,loaded:!1};return t[e].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var r={};n.m=t,n.c=r,n.p="./",n(0)}([function(t,n,r){r(195),t.exports=r(191)},function(t,n,r){var e=r(3),i=r(52),o=r(27),u=r(28),c=r(53),f="prototype",a=function(t,n,r){var s,l,h,v,p=t&a.F,d=t&a.G,y=t&a.S,g=t&a.P,b=t&a.B,m=d?e:y?e[n]||(e[n]={}):(e[n]||{})[f],x=d?i:i[n]||(i[n]={}),w=x[f]||(x[f]={});d&&(r=n);for(s in r)l=!p&&m&&void 0!==m[s],h=(l?m:r)[s],v=b&&l?c(h,e):g&&"function"==typeof h?c(Function.call,h):h,m&&u(m,s,h,t&a.U),x[s]!=h&&o(x,s,v),g&&w[s]!=h&&(w[s]=h)};e.core=i,a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,n,r){var e=r(6);t.exports=function(t){if(!e(t))throw TypeError(t+" is not an object!");return t}},function(t,n){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,n){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,n){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,n,r){var e=r(126)("wks"),i=r(76),o=r(3).Symbol,u="function"==typeof o;(t.exports=function(t){return e[t]||(e[t]=u&&o[t]||(u?o:i)("Symbol."+t))}).store=e},function(t,n){var r={}.hasOwnProperty;t.exports=function(t,n){return r.call(t,n)}},function(t,n,r){var e=r(94),i=r(33);t.exports=function(t){return e(i(t))}},function(t,n,r){t.exports=!r(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,n,r){var e=r(2),i=r(167),o=r(50),u=Object.defineProperty;n.f=r(10)?Object.defineProperty:function(t,n,r){if(e(t),n=o(n,!0),e(r),i)try{return u(t,n,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[n]=r.value),t}},function(t,n,r){t.exports=!r(18)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,n,r){var e=r(14),i=r(22);t.exports=r(12)?function(t,n,r){return e.f(t,n,i(1,r))}:function(t,n,r){return t[n]=r,t}},function(t,n,r){var e=r(20),i=r(58),o=r(42),u=Object.defineProperty;n.f=r(12)?Object.defineProperty:function(t,n,r){if(e(t),n=o(n,!0),e(r),i)try{return u(t,n,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[n]=r.value),t}},function(t,n,r){var e=r(40)("wks"),i=r(23),o=r(5).Symbol,u="function"==typeof o;(t.exports=function(t){return e[t]||(e[t]=u&&o[t]||(u?o:i)("Symbol."+t))}).store=e},function(t,n,r){var e=r(67),i=Math.min;t.exports=function(t){return t>0?i(e(t),9007199254740991):0}},function(t,n,r){var e=r(46);t.exports=function(t){return Object(e(t))}},function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,n,r){var e=r(63),i=r(34);t.exports=Object.keys||function(t){return e(t,i)}},function(t,n,r){var e=r(21);t.exports=function(t){if(!e(t))throw TypeError(t+" is not an object!");return t}},function(t,n){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},function(t,n){var r=0,e=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++r+e).toString(36))}},function(t,n){var r={}.hasOwnProperty;t.exports=function(t,n){return r.call(t,n)}},function(t,n){var r=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=r)},function(t,n){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,n,r){var e=r(11),i=r(66);t.exports=r(10)?function(t,n,r){return e.f(t,n,i(1,r))}:function(t,n,r){return t[n]=r,t}},function(t,n,r){var e=r(3),i=r(27),o=r(24),u=r(76)("src"),c="toString",f=Function[c],a=(""+f).split(c);r(52).inspectSource=function(t){return f.call(t)},(t.exports=function(t,n,r,c){var f="function"==typeof r;f&&(o(r,"name")||i(r,"name",n)),t[n]!==r&&(f&&(o(r,u)||i(r,u,t[n]?""+t[n]:a.join(String(n)))),t===e?t[n]=r:c?t[n]?t[n]=r:i(t,n,r):(delete t[n],i(t,n,r)))})(Function.prototype,c,function(){return"function"==typeof this&&this[u]||f.call(this)})},function(t,n,r){var e=r(1),i=r(4),o=r(46),u=function(t,n,r,e){var i=String(o(t)),u="<"+n;return""!==r&&(u+=" "+r+'="'+String(e).replace(/"/g,"&quot;")+'"'),u+">"+i+"</"+n+">"};t.exports=function(t,n){var r={};r[t]=n(u),e(e.P+e.F*i(function(){var n=""[t]('"');return n!==n.toLowerCase()||n.split('"').length>3}),"String",r)}},function(t,n,r){var e=r(115),i=r(46);t.exports=function(t){return e(i(t))}},function(t,n,r){var e=r(116),i=r(66),o=r(30),u=r(50),c=r(24),f=r(167),a=Object.getOwnPropertyDescriptor;n.f=r(10)?a:function(t,n){if(t=o(t),n=u(n,!0),f)try{return a(t,n)}catch(t){}if(c(t,n))return i(!e.f.call(t,n),t[n])}},function(t,n,r){var e=r(24),i=r(17),o=r(145)("IE_PROTO"),u=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),e(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},function(t,n){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on  "+t);return t}},function(t,n){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,n){t.exports={}},function(t,n){t.exports=!0},function(t,n){n.f={}.propertyIsEnumerable},function(t,n,r){var e=r(14).f,i=r(8),o=r(15)("toStringTag");t.exports=function(t,n,r){t&&!i(t=r?t:t.prototype,o)&&e(t,o,{configurable:!0,value:n})}},function(t,n,r){var e=r(40)("keys"),i=r(23);t.exports=function(t){return e[t]||(e[t]=i(t))}},function(t,n,r){var e=r(5),i="__core-js_shared__",o=e[i]||(e[i]={});t.exports=function(t){return o[t]||(o[t]={})}},function(t,n){var r=Math.ceil,e=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?e:r)(t)}},function(t,n,r){var e=r(21);t.exports=function(t,n){if(!e(t))return t;var r,i;if(n&&"function"==typeof(r=t.toString)&&!e(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!e(i=r.call(t)))return i;if(!n&&"function"==typeof(r=t.toString)&&!e(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,n,r){var e=r(5),i=r(25),o=r(36),u=r(44),c=r(14).f;t.exports=function(t){var n=i.Symbol||(i.Symbol=o?{}:e.Symbol||{});"_"==t.charAt(0)||t in n||c(n,t,{value:u.f(t)})}},function(t,n,r){n.f=r(15)},function(t,n){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},function(t,n){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on  "+t);return t}},function(t,n,r){var e=r(4);t.exports=function(t,n){return!!t&&e(function(){n?t.call(null,function(){},1):t.call(null)})}},function(t,n,r){var e=r(53),i=r(115),o=r(17),u=r(16),c=r(203);t.exports=function(t,n){var r=1==t,f=2==t,a=3==t,s=4==t,l=6==t,h=5==t||l,v=n||c;return function(n,c,p){for(var d,y,g=o(n),b=i(g),m=e(c,p,3),x=u(b.length),w=0,S=r?v(n,x):f?v(n,0):void 0;x>w;w++)if((h||w in b)&&(d=b[w],y=m(d,w,g),t))if(r)S[w]=y;else if(y)switch(t){case 3:return!0;case 5:return d;case 6:return w;case 2:S.push(d)}else if(s)return!1;return l?-1:a||s?s:S}}},function(t,n,r){var e=r(1),i=r(52),o=r(4);t.exports=function(t,n){var r=(i.Object||{})[t]||Object[t],u={};u[t]=n(r),e(e.S+e.F*o(function(){r(1)}),"Object",u)}},function(t,n,r){var e=r(6);t.exports=function(t,n){if(!e(t))return t;var r,i;if(n&&"function"==typeof(r=t.toString)&&!e(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!e(i=r.call(t)))return i;if(!n&&"function"==typeof(r=t.toString)&&!e(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,n,r){var e=r(5),i=r(25),o=r(91),u=r(13),c="prototype",f=function(t,n,r){var a,s,l,h=t&f.F,v=t&f.G,p=t&f.S,d=t&f.P,y=t&f.B,g=t&f.W,b=v?i:i[n]||(i[n]={}),m=b[c],x=v?e:p?e[n]:(e[n]||{})[c];v&&(r=n);for(a in r)(s=!h&&x&&void 0!==x[a])&&a in b||(l=s?x[a]:r[a],b[a]=v&&"function"!=typeof x[a]?r[a]:y&&s?o(l,e):g&&x[a]==l?function(t){var n=function(n,r,e){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(n);case 2:return new t(n,r)}return new t(n,r,e)}return t.apply(this,arguments)};return n[c]=t[c],n}(l):d&&"function"==typeof l?o(Function.call,l):l,d&&((b.virtual||(b.virtual={}))[a]=l,t&f.R&&m&&!m[a]&&u(m,a,l)))};f.F=1,f.G=2,f.S=4,f.P=8,f.B=16,f.W=32,f.U=64,f.R=128,t.exports=f},function(t,n){var r=t.exports={version:"2.4.0"};"number"==typeof __e&&(__e=r)},function(t,n,r){var e=r(26);t.exports=function(t,n,r){if(e(t),void 0===n)return t;switch(r){case 1:return function(r){return t.call(n,r)};case 2:return function(r,e){return t.call(n,r,e)};case 3:return function(r,e,i){return t.call(n,r,e,i)}}return function(){return t.apply(n,arguments)}}},function(t,n,r){var e=r(183),i=r(1),o=r(126)("metadata"),u=o.store||(o.store=new(r(186))),c=function(t,n,r){var i=u.get(t);if(!i){if(!r)return;u.set(t,i=new e)}var o=i.get(n);if(!o){if(!r)return;i.set(n,o=new e)}return o},f=function(t,n,r){var e=c(n,r,!1);return void 0!==e&&e.has(t)},a=function(t,n,r){var e=c(n,r,!1);return void 0===e?void 0:e.get(t)},s=function(t,n,r,e){c(r,e,!0).set(t,n)},l=function(t,n){var r=c(t,n,!1),e=[];return r&&r.forEach(function(t,n){e.push(n)}),e},h=function(t){return void 0===t||"symbol"==typeof t?t:String(t)},v=function(t){i(i.S,"Reflect",t)};t.exports={store:u,map:c,has:f,get:a,set:s,keys:l,key:h,exp:v}},function(t,n,r){"use strict";if(r(10)){var e=r(69),i=r(3),o=r(4),u=r(1),c=r(127),f=r(152),a=r(53),s=r(68),l=r(66),h=r(27),v=r(73),p=r(67),d=r(16),y=r(75),g=r(50),b=r(24),m=r(180),x=r(114),w=r(6),S=r(17),_=r(137),O=r(70),E=r(32),P=r(71).f,j=r(154),F=r(76),M=r(7),A=r(48),N=r(117),T=r(146),I=r(155),k=r(80),L=r(123),R=r(74),C=r(130),D=r(160),U=r(11),W=r(31),G=U.f,B=W.f,V=i.RangeError,z=i.TypeError,q=i.Uint8Array,K="ArrayBuffer",J="Shared"+K,Y="BYTES_PER_ELEMENT",H="prototype",$=Array[H],X=f.ArrayBuffer,Q=f.DataView,Z=A(0),tt=A(2),nt=A(3),rt=A(4),et=A(5),it=A(6),ot=N(!0),ut=N(!1),ct=I.values,ft=I.keys,at=I.entries,st=$.lastIndexOf,lt=$.reduce,ht=$.reduceRight,vt=$.join,pt=$.sort,dt=$.slice,yt=$.toString,gt=$.toLocaleString,bt=M("iterator"),mt=M("toStringTag"),xt=F("typed_constructor"),wt=F("def_constructor"),St=c.CONSTR,_t=c.TYPED,Ot=c.VIEW,Et="Wrong length!",Pt=A(1,function(t,n){return Tt(T(t,t[wt]),n)}),jt=o(function(){return 1===new q(new Uint16Array([1]).buffer)[0]}),Ft=!!q&&!!q[H].set&&o(function(){new q(1).set({})}),Mt=function(t,n){if(void 0===t)throw z(Et);var r=+t,e=d(t);if(n&&!m(r,e))throw V(Et);return e},At=function(t,n){var r=p(t);if(r<0||r%n)throw V("Wrong offset!");return r},Nt=function(t){if(w(t)&&_t in t)return t;throw z(t+" is not a typed array!")},Tt=function(t,n){if(!(w(t)&&xt in t))throw z("It is not a typed array constructor!");return new t(n)},It=function(t,n){return kt(T(t,t[wt]),n)},kt=function(t,n){for(var r=0,e=n.length,i=Tt(t,e);e>r;)i[r]=n[r++];return i},Lt=function(t,n,r){G(t,n,{get:function(){return this._d[r]}})},Rt=function(t){var n,r,e,i,o,u,c=S(t),f=arguments.length,s=f>1?arguments[1]:void 0,l=void 0!==s,h=j(c);if(void 0!=h&&!_(h)){for(u=h.call(c),e=[],n=0;!(o=u.next()).done;n++)e.push(o.value);c=e}for(l&&f>2&&(s=a(s,arguments[2],2)),n=0,r=d(c.length),i=Tt(this,r);r>n;n++)i[n]=l?s(c[n],n):c[n];return i},Ct=function(){for(var t=0,n=arguments.length,r=Tt(this,n);n>t;)r[t]=arguments[t++];return r},Dt=!!q&&o(function(){gt.call(new q(1))}),Ut=function(){return gt.apply(Dt?dt.call(Nt(this)):Nt(this),arguments)},Wt={copyWithin:function(t,n){return D.call(Nt(this),t,n,arguments.length>2?arguments[2]:void 0)},every:function(t){return rt(Nt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return C.apply(Nt(this),arguments)},filter:function(t){return It(this,tt(Nt(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return et(Nt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return it(Nt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){Z(Nt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return ut(Nt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return ot(Nt(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return vt.apply(Nt(this),arguments)},lastIndexOf:function(t){return st.apply(Nt(this),arguments)},map:function(t){return Pt(Nt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return lt.apply(Nt(this),arguments)},reduceRight:function(t){return ht.apply(Nt(this),arguments)},reverse:function(){for(var t,n=this,r=Nt(n).length,e=Math.floor(r/2),i=0;i<e;)t=n[i],n[i++]=n[--r],n[r]=t;return n},some:function(t){return nt(Nt(this),t,arguments.length>1?arguments[1]:void 0)},sort:function(t){return pt.call(Nt(this),t)},subarray:function(t,n){var r=Nt(this),e=r.length,i=y(t,e);return new(T(r,r[wt]))(r.buffer,r.byteOffset+i*r.BYTES_PER_ELEMENT,d((void 0===n?e:y(n,e))-i))}},Gt=function(t,n){return It(this,dt.call(Nt(this),t,n))},Bt=function(t){Nt(this);var n=At(arguments[1],1),r=this.length,e=S(t),i=d(e.length),o=0;if(i+n>r)throw V(Et);for(;o<i;)this[n+o]=e[o++]},Vt={entries:function(){return at.call(Nt(this))},keys:function(){return ft.call(Nt(this))},values:function(){return ct.call(Nt(this))}},zt=function(t,n){return w(t)&&t[_t]&&"symbol"!=typeof n&&n in t&&String(+n)==String(n)},qt=function(t,n){return zt(t,n=g(n,!0))?l(2,t[n]):B(t,n)},Kt=function(t,n,r){return!(zt(t,n=g(n,!0))&&w(r)&&b(r,"value"))||b(r,"get")||b(r,"set")||r.configurable||b(r,"writable")&&!r.writable||b(r,"enumerable")&&!r.enumerable?G(t,n,r):(t[n]=r.value,t)};St||(W.f=qt,U.f=Kt),u(u.S+u.F*!St,"Object",{getOwnPropertyDescriptor:qt,defineProperty:Kt}),o(function(){yt.call({})})&&(yt=gt=function(){return vt.call(this)});var Jt=v({},Wt);v(Jt,Vt),h(Jt,bt,Vt.values),v(Jt,{slice:Gt,set:Bt,constructor:function(){},toString:yt,toLocaleString:Ut}),Lt(Jt,"buffer","b"),Lt(Jt,"byteOffset","o"),Lt(Jt,"byteLength","l"),Lt(Jt,"length","e"),G(Jt,mt,{get:function(){return this[_t]}}),t.exports=function(t,n,r,f){f=!!f;var a=t+(f?"Clamped":"")+"Array",l="Uint8Array"!=a,v="get"+t,p="set"+t,y=i[a],g=y||{},b=y&&E(y),m=!y||!c.ABV,S={},_=y&&y[H],j=function(t,r){var e=t._d;return e.v[v](r*n+e.o,jt)},F=function(t,r,e){var i=t._d;f&&(e=(e=Math.round(e))<0?0:e>255?255:255&e),i.v[p](r*n+i.o,e,jt)},M=function(t,n){G(t,n,{get:function(){return j(this,n)},set:function(t){return F(this,n,t)},enumerable:!0})};m?(y=r(function(t,r,e,i){s(t,y,a,"_d");var o,u,c,f,l=0,v=0;if(w(r)){if(!(r instanceof X||(f=x(r))==K||f==J))return _t in r?kt(y,r):Rt.call(y,r);o=r,v=At(e,n);var p=r.byteLength;if(void 0===i){if(p%n)throw V(Et);if((u=p-v)<0)throw V(Et)}else if((u=d(i)*n)+v>p)throw V(Et);c=u/n}else c=Mt(r,!0),u=c*n,o=new X(u);for(h(t,"_d",{b:o,o:v,l:u,e:c,v:new Q(o)});l<c;)M(t,l++)}),_=y[H]=O(Jt),h(_,"constructor",y)):L(function(t){new y(null),new y(t)},!0)||(y=r(function(t,r,e,i){s(t,y,a);var o;return w(r)?r instanceof X||(o=x(r))==K||o==J?void 0!==i?new g(r,At(e,n),i):void 0!==e?new g(r,At(e,n)):new g(r):_t in r?kt(y,r):Rt.call(y,r):new g(Mt(r,l))}),Z(b!==Function.prototype?P(g).concat(P(b)):P(g),function(t){t in y||h(y,t,g[t])}),y[H]=_,e||(_.constructor=y));var A=_[bt],N=!!A&&("values"==A.name||void 0==A.name),T=Vt.values;h(y,xt,!0),h(_,_t,a),h(_,Ot,!0),h(_,wt,y),(f?new y(1)[mt]==a:mt in _)||G(_,mt,{get:function(){return a}}),S[a]=y,u(u.G+u.W+u.F*(y!=g),S),u(u.S,a,{BYTES_PER_ELEMENT:n,from:Rt,of:Ct}),Y in _||h(_,Y,n),u(u.P,a,Wt),R(a),u(u.P+u.F*Ft,a,{set:Bt}),u(u.P+u.F*!N,a,Vt),u(u.P+u.F*(_.toString!=yt),a,{toString:yt}),u(u.P+u.F*o(function(){new y(1).slice()}),a,{slice:Gt}),u(u.P+u.F*(o(function(){return[1,2].toLocaleString()!=new y([1,2]).toLocaleString()})||!o(function(){_.toLocaleString.call([1,2])})),a,{toLocaleString:Ut}),k[a]=N?A:T,e||N||h(_,bt,T)}}else t.exports=function(){}},function(t,n){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},function(t,n,r){var e=r(21),i=r(5).document,o=e(i)&&e(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,n,r){t.exports=!r(12)&&!r(18)(function(){return 7!=Object.defineProperty(r(57)("div"),"a",{get:function(){return 7}}).a})},function(t,n,r){"use strict";var e=r(36),i=r(51),o=r(64),u=r(13),c=r(8),f=r(35),a=r(96),s=r(38),l=r(103),h=r(15)("iterator"),v=!([].keys&&"next"in[].keys()),p="keys",d="values",y=function(){return this};t.exports=function(t,n,r,g,b,m,x){a(r,n,g);var w,S,_,O=function(t){if(!v&&t in F)return F[t];switch(t){case p:case d:return function(){return new r(this,t)}}return function(){return new r(this,t)}},E=n+" Iterator",P=b==d,j=!1,F=t.prototype,M=F[h]||F["@@iterator"]||b&&F[b],A=M||O(b),N=b?P?O("entries"):A:void 0,T="Array"==n?F.entries||M:M;if(T&&(_=l(T.call(new t)))!==Object.prototype&&(s(_,E,!0),e||c(_,h)||u(_,h,y)),P&&M&&M.name!==d&&(j=!0,A=function(){return M.call(this)}),e&&!x||!v&&!j&&F[h]||u(F,h,A),f[n]=A,f[E]=y,b)if(w={values:P?A:O(d),keys:m?A:O(p),entries:N},x)for(S in w)S in F||o(F,S,w[S]);else i(i.P+i.F*(v||j),n,w);return w}},function(t,n,r){var e=r(20),i=r(100),o=r(34),u=r(39)("IE_PROTO"),c=function(){},f="prototype",a=function(){var t,n=r(57)("iframe"),e=o.length;for(n.style.display="none",r(93).appendChild(n),n.src="javascript:",t=n.contentWindow.document,t.open(),t.write("<script>document.F=Object<\/script>"),t.close(),a=t.F;e--;)delete a[f][o[e]];return a()};t.exports=Object.create||function(t,n){var r;return null!==t?(c[f]=e(t),r=new c,c[f]=null,r[u]=t):r=a(),void 0===n?r:i(r,n)}},function(t,n,r){var e=r(63),i=r(34).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(t){return e(t,i)}},function(t,n){n.f=Object.getOwnPropertySymbols},function(t,n,r){var e=r(8),i=r(9),o=r(90)(!1),u=r(39)("IE_PROTO");t.exports=function(t,n){var r,c=i(t),f=0,a=[];for(r in c)r!=u&&e(c,r)&&a.push(r);for(;n.length>f;)e(c,r=n[f++])&&(~o(a,r)||a.push(r));return a}},function(t,n,r){t.exports=r(13)},function(t,n,r){var e=r(76)("meta"),i=r(6),o=r(24),u=r(11).f,c=0,f=Object.isExtensible||function(){return!0},a=!r(4)(function(){return f(Object.preventExtensions({}))}),s=function(t){u(t,e,{value:{i:"O"+ ++c,w:{}}})},l=function(t,n){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,e)){if(!f(t))return"F";if(!n)return"E";s(t)}return t[e].i},h=function(t,n){if(!o(t,e)){if(!f(t))return!0;if(!n)return!1;s(t)}return t[e].w},v=function(t){return a&&p.NEED&&f(t)&&!o(t,e)&&s(t),t},p=t.exports={KEY:e,NEED:!1,fastKey:l,getWeak:h,onFreeze:v}},function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},function(t,n){var r=Math.ceil,e=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?e:r)(t)}},function(t,n){t.exports=function(t,n,r,e){if(!(t instanceof n)||void 0!==e&&e in t)throw TypeError(r+": incorrect invocation!");return t}},function(t,n){t.exports=!1},function(t,n,r){var e=r(2),i=r(173),o=r(133),u=r(145)("IE_PROTO"),c=function(){},f="prototype",a=function(){var t,n=r(132)("iframe"),e=o.length;for(n.style.display="none",r(135).appendChild(n),n.src="javascript:",t=n.contentWindow.document,t.open(),t.write("<script>document.F=Object<\/script>"),t.close(),a=t.F;e--;)delete a[f][o[e]];return a()};t.exports=Object.create||function(t,n){var r;return null!==t?(c[f]=e(t),r=new c,c[f]=null,r[u]=t):r=a(),void 0===n?r:i(r,n)}},function(t,n,r){var e=r(175),i=r(133).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(t){return e(t,i)}},function(t,n,r){var e=r(175),i=r(133);t.exports=Object.keys||function(t){return e(t,i)}},function(t,n,r){var e=r(28);t.exports=function(t,n,r){for(var i in n)e(t,i,n[i],r);return t}},function(t,n,r){"use strict";var e=r(3),i=r(11),o=r(10),u=r(7)("species");t.exports=function(t){var n=e[t];o&&n&&!n[u]&&i.f(n,u,{configurable:!0,get:function(){return this}})}},function(t,n,r){var e=r(67),i=Math.max,o=Math.min;t.exports=function(t,n){return t=e(t),t<0?i(t+n,0):o(t,n)}},function(t,n){var r=0,e=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++r+e).toString(36))}},function(t,n,r){var e=r(33);t.exports=function(t){return Object(e(t))}},function(t,n,r){var e=r(7)("unscopables"),i=Array.prototype;void 0==i[e]&&r(27)(i,e,{}),t.exports=function(t){i[e][t]=!0}},function(t,n,r){var e=r(53),i=r(169),o=r(137),u=r(2),c=r(16),f=r(154),a={},s={},n=t.exports=function(t,n,r,l,h){var v,p,d,y,g=h?function(){return t}:f(t),b=e(r,l,n?2:1),m=0;if("function"!=typeof g)throw TypeError(t+" is not iterable!");if(o(g)){for(v=c(t.length);v>m;m++)if((y=n?b(u(p=t[m])[0],p[1]):b(t[m]))===a||y===s)return y}else for(d=g.call(t);!(p=d.next()).done;)if((y=i(d,b,p.value,n))===a||y===s)return y};n.BREAK=a,n.RETURN=s},function(t,n){t.exports={}},function(t,n,r){var e=r(11).f,i=r(24),o=r(7)("toStringTag");t.exports=function(t,n,r){t&&!i(t=r?t:t.prototype,o)&&e(t,o,{configurable:!0,value:n})}},function(t,n,r){var e=r(1),i=r(46),o=r(4),u=r(150),c="["+u+"]",f="​",a=RegExp("^"+c+c+"*"),s=RegExp(c+c+"*$"),l=function(t,n,r){var i={},c=o(function(){return!!u[t]()||f[t]()!=f}),a=i[t]=c?n(h):u[t];r&&(i[r]=a),e(e.P+e.F*c,"String",i)},h=l.trim=function(t,n){return t=String(i(t)),1&n&&(t=t.replace(a,"")),2&n&&(t=t.replace(s,"")),t};t.exports=l},function(t,n,r){t.exports={default:r(86),__esModule:!0}},function(t,n,r){t.exports={default:r(87),__esModule:!0}},function(t,n,r){"use strict";function e(t){return t&&t.__esModule?t:{default:t}}n.__esModule=!0;var i=r(84),o=e(i),u=r(83),c=e(u),f="function"==typeof c.default&&"symbol"==typeof o.default?function(t){return typeof t}:function(t){return t&&"function"==typeof c.default&&t.constructor===c.default&&t!==c.default.prototype?"symbol":typeof t};n.default="function"==typeof c.default&&"symbol"===f(o.default)?function(t){return void 0===t?"undefined":f(t)}:function(t){return t&&"function"==typeof c.default&&t.constructor===c.default&&t!==c.default.prototype?"symbol":void 0===t?"undefined":f(t)}},function(t,n,r){r(110),r(108),r(111),r(112),t.exports=r(25).Symbol},function(t,n,r){r(109),r(113),t.exports=r(44).f("iterator")},function(t,n){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,n){t.exports=function(){}},function(t,n,r){var e=r(9),i=r(106),o=r(105);t.exports=function(t){return function(n,r,u){var c,f=e(n),a=i(f.length),s=o(u,a);if(t&&r!=r){for(;a>s;)if((c=f[s++])!=c)return!0}else for(;a>s;s++)if((t||s in f)&&f[s]===r)return t||s||0;return!t&&-1}}},function(t,n,r){var e=r(88);t.exports=function(t,n,r){if(e(t),void 0===n)return t;switch(r){case 1:return function(r){return t.call(n,r)};case 2:return function(r,e){return t.call(n,r,e)};case 3:return function(r,e,i){return t.call(n,r,e,i)}}return function(){return t.apply(n,arguments)}}},function(t,n,r){var e=r(19),i=r(62),o=r(37);t.exports=function(t){var n=e(t),r=i.f;if(r)for(var u,c=r(t),f=o.f,a=0;c.length>a;)f.call(t,u=c[a++])&&n.push(u);return n}},function(t,n,r){t.exports=r(5).document&&document.documentElement},function(t,n,r){var e=r(56);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==e(t)?t.split(""):Object(t)}},function(t,n,r){var e=r(56);t.exports=Array.isArray||function(t){return"Array"==e(t)}},function(t,n,r){"use strict";var e=r(60),i=r(22),o=r(38),u={};r(13)(u,r(15)("iterator"),function(){return this}),t.exports=function(t,n,r){t.prototype=e(u,{next:i(1,r)}),o(t,n+" Iterator")}},function(t,n){t.exports=function(t,n){return{value:n,done:!!t}}},function(t,n,r){var e=r(19),i=r(9);t.exports=function(t,n){for(var r,o=i(t),u=e(o),c=u.length,f=0;c>f;)if(o[r=u[f++]]===n)return r}},function(t,n,r){var e=r(23)("meta"),i=r(21),o=r(8),u=r(14).f,c=0,f=Object.isExtensible||function(){return!0},a=!r(18)(function(){return f(Object.preventExtensions({}))}),s=function(t){u(t,e,{value:{i:"O"+ ++c,w:{}}})},l=function(t,n){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,e)){if(!f(t))return"F";if(!n)return"E";s(t)}return t[e].i},h=function(t,n){if(!o(t,e)){if(!f(t))return!0;if(!n)return!1;s(t)}return t[e].w},v=function(t){return a&&p.NEED&&f(t)&&!o(t,e)&&s(t),t},p=t.exports={KEY:e,NEED:!1,fastKey:l,getWeak:h,onFreeze:v}},function(t,n,r){var e=r(14),i=r(20),o=r(19);t.exports=r(12)?Object.defineProperties:function(t,n){i(t);for(var r,u=o(n),c=u.length,f=0;c>f;)e.f(t,r=u[f++],n[r]);return t}},function(t,n,r){var e=r(37),i=r(22),o=r(9),u=r(42),c=r(8),f=r(58),a=Object.getOwnPropertyDescriptor;n.f=r(12)?a:function(t,n){if(t=o(t),n=u(n,!0),f)try{return a(t,n)}catch(t){}if(c(t,n))return i(!e.f.call(t,n),t[n])}},function(t,n,r){var e=r(9),i=r(61).f,o={}.toString,u="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],c=function(t){try{return i(t)}catch(t){return u.slice()}};t.exports.f=function(t){return u&&"[object Window]"==o.call(t)?c(t):i(e(t))}},function(t,n,r){var e=r(8),i=r(77),o=r(39)("IE_PROTO"),u=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),e(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},function(t,n,r){var e=r(41),i=r(33);t.exports=function(t){return function(n,r){var o,u,c=String(i(n)),f=e(r),a=c.length;return f<0||f>=a?t?"":void 0:(o=c.charCodeAt(f),o<55296||o>56319||f+1===a||(u=c.charCodeAt(f+1))<56320||u>57343?t?c.charAt(f):o:t?c.slice(f,f+2):u-56320+(o-55296<<10)+65536)}}},function(t,n,r){var e=r(41),i=Math.max,o=Math.min;t.exports=function(t,n){return t=e(t),t<0?i(t+n,0):o(t,n)}},function(t,n,r){var e=r(41),i=Math.min;t.exports=function(t){return t>0?i(e(t),9007199254740991):0}},function(t,n,r){"use strict";var e=r(89),i=r(97),o=r(35),u=r(9);t.exports=r(59)(Array,"Array",function(t,n){this._t=u(t),this._i=0,this._k=n},function(){var t=this._t,n=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,i(1)):"keys"==n?i(0,r):"values"==n?i(0,t[r]):i(0,[r,t[r]])},"values"),o.Arguments=o.Array,e("keys"),e("values"),e("entries")},function(t,n){},function(t,n,r){"use strict";var e=r(104)(!0);r(59)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,n=this._t,r=this._i;return r>=n.length?{value:void 0,done:!0}:(t=e(n,r),this._i+=t.length,{value:t,done:!1})})},function(t,n,r){"use strict";var e=r(5),i=r(8),o=r(12),u=r(51),c=r(64),f=r(99).KEY,a=r(18),s=r(40),l=r(38),h=r(23),v=r(15),p=r(44),d=r(43),y=r(98),g=r(92),b=r(95),m=r(20),x=r(9),w=r(42),S=r(22),_=r(60),O=r(102),E=r(101),P=r(14),j=r(19),F=E.f,M=P.f,A=O.f,N=e.Symbol,T=e.JSON,I=T&&T.stringify,k="prototype",L=v("_hidden"),R=v("toPrimitive"),C={}.propertyIsEnumerable,D=s("symbol-registry"),U=s("symbols"),W=s("op-symbols"),G=Object[k],B="function"==typeof N,V=e.QObject,z=!V||!V[k]||!V[k].findChild,q=o&&a(function(){return 7!=_(M({},"a",{get:function(){return M(this,"a",{value:7}).a}})).a})?function(t,n,r){var e=F(G,n);e&&delete G[n],M(t,n,r),e&&t!==G&&M(G,n,e)}:M,K=function(t){var n=U[t]=_(N[k]);return n._k=t,n},J=B&&"symbol"==typeof N.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof N},Y=function(t,n,r){return t===G&&Y(W,n,r),m(t),n=w(n,!0),m(r),i(U,n)?(r.enumerable?(i(t,L)&&t[L][n]&&(t[L][n]=!1),r=_(r,{enumerable:S(0,!1)})):(i(t,L)||M(t,L,S(1,{})),t[L][n]=!0),q(t,n,r)):M(t,n,r)},H=function(t,n){m(t);for(var r,e=g(n=x(n)),i=0,o=e.length;o>i;)Y(t,r=e[i++],n[r]);return t},$=function(t,n){return void 0===n?_(t):H(_(t),n)},X=function(t){var n=C.call(this,t=w(t,!0));return!(this===G&&i(U,t)&&!i(W,t))&&(!(n||!i(this,t)||!i(U,t)||i(this,L)&&this[L][t])||n)},Q=function(t,n){if(t=x(t),n=w(n,!0),t!==G||!i(U,n)||i(W,n)){var r=F(t,n);return!r||!i(U,n)||i(t,L)&&t[L][n]||(r.enumerable=!0),r}},Z=function(t){for(var n,r=A(x(t)),e=[],o=0;r.length>o;)i(U,n=r[o++])||n==L||n==f||e.push(n);return e},tt=function(t){for(var n,r=t===G,e=A(r?W:x(t)),o=[],u=0;e.length>u;)!i(U,n=e[u++])||r&&!i(G,n)||o.push(U[n]);return o};B||(N=function(){if(this instanceof N)throw TypeError("Symbol is not a constructor!");var t=h(arguments.length>0?arguments[0]:void 0),n=function(r){this===G&&n.call(W,r),i(this,L)&&i(this[L],t)&&(this[L][t]=!1),q(this,t,S(1,r))};return o&&z&&q(G,t,{configurable:!0,set:n}),K(t)},c(N[k],"toString",function(){return this._k}),E.f=Q,P.f=Y,r(61).f=O.f=Z,r(37).f=X,r(62).f=tt,o&&!r(36)&&c(G,"propertyIsEnumerable",X,!0),p.f=function(t){return K(v(t))}),u(u.G+u.W+u.F*!B,{Symbol:N});for(var nt="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),rt=0;nt.length>rt;)v(nt[rt++]);for(var nt=j(v.store),rt=0;nt.length>rt;)d(nt[rt++]);u(u.S+u.F*!B,"Symbol",{for:function(t){return i(D,t+="")?D[t]:D[t]=N(t)},keyFor:function(t){if(J(t))return y(D,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){z=!0},useSimple:function(){z=!1}}),u(u.S+u.F*!B,"Object",{create:$,defineProperty:Y,defineProperties:H,getOwnPropertyDescriptor:Q,getOwnPropertyNames:Z,getOwnPropertySymbols:tt}),T&&u(u.S+u.F*(!B||a(function(){var t=N();return"[null]"!=I([t])||"{}"!=I({a:t})||"{}"!=I(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!J(t)){for(var n,r,e=[t],i=1;arguments.length>i;)e.push(arguments[i++]);return n=e[1],"function"==typeof n&&(r=n),!r&&b(n)||(n=function(t,n){if(r&&(n=r.call(this,t,n)),!J(n))return n}),e[1]=n,I.apply(T,e)}}}),N[k][R]||r(13)(N[k],R,N[k].valueOf),l(N,"Symbol"),l(Math,"Math",!0),l(e.JSON,"JSON",!0)},function(t,n,r){r(43)("asyncIterator")},function(t,n,r){r(43)("observable")},function(t,n,r){r(107);for(var e=r(5),i=r(13),o=r(35),u=r(15)("toStringTag"),c=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],f=0;f<5;f++){var a=c[f],s=e[a],l=s&&s.prototype;l&&!l[u]&&i(l,u,a),o[a]=o.Array}},function(t,n,r){var e=r(45),i=r(7)("toStringTag"),o="Arguments"==e(function(){return arguments}()),u=function(t,n){try{return t[n]}catch(t){}};t.exports=function(t){var n,r,c;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=u(n=Object(t),i))?r:o?e(n):"Object"==(c=e(n))&&"function"==typeof n.callee?"Arguments":c}},function(t,n,r){var e=r(45);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==e(t)?t.split(""):Object(t)}},function(t,n){n.f={}.propertyIsEnumerable},function(t,n,r){var e=r(30),i=r(16),o=r(75);t.exports=function(t){return function(n,r,u){var c,f=e(n),a=i(f.length),s=o(u,a);if(t&&r!=r){for(;a>s;)if((c=f[s++])!=c)return!0}else for(;a>s;s++)if((t||s in f)&&f[s]===r)return t||s||0;return!t&&-1}}},function(t,n,r){"use strict";var e=r(3),i=r(1),o=r(28),u=r(73),c=r(65),f=r(79),a=r(68),s=r(6),l=r(4),h=r(123),v=r(81),p=r(136);t.exports=function(t,n,r,d,y,g){var b=e[t],m=b,x=y?"set":"add",w=m&&m.prototype,S={},_=function(t){var n=w[t];o(w,t,"delete"==t?function(t){return!(g&&!s(t))&&n.call(this,0===t?0:t)}:"has"==t?function(t){return!(g&&!s(t))&&n.call(this,0===t?0:t)}:"get"==t?function(t){return g&&!s(t)?void 0:n.call(this,0===t?0:t)}:"add"==t?function(t){return n.call(this,0===t?0:t),this}:function(t,r){return n.call(this,0===t?0:t,r),this})};if("function"==typeof m&&(g||w.forEach&&!l(function(){(new m).entries().next()}))){var O=new m,E=O[x](g?{}:-0,1)!=O,P=l(function(){O.has(1)}),j=h(function(t){new m(t)}),F=!g&&l(function(){for(var t=new m,n=5;n--;)t[x](n,n);return!t.has(-0)});j||(m=n(function(n,r){a(n,m,t);var e=p(new b,n,m);return void 0!=r&&f(r,y,e[x],e),e}),m.prototype=w,w.constructor=m),(P||F)&&(_("delete"),_("has"),y&&_("get")),(F||E)&&_(x),g&&w.clear&&delete w.clear}else m=d.getConstructor(n,t,y,x),u(m.prototype,r),c.NEED=!0;return v(m,t),S[t]=m,i(i.G+i.W+i.F*(m!=b),S),g||d.setStrong(m,t,y),m}},function(t,n,r){"use strict";var e=r(27),i=r(28),o=r(4),u=r(46),c=r(7);t.exports=function(t,n,r){var f=c(t),a=r(u,f,""[t]),s=a[0],l=a[1];o(function(){var n={};return n[f]=function(){return 7},7!=""[t](n)})&&(i(String.prototype,t,s),e(RegExp.prototype,f,2==n?function(t,n){return l.call(t,this,n)}:function(t){return l.call(t,this)}))}
},function(t,n,r){"use strict";var e=r(2);t.exports=function(){var t=e(this),n="";return t.global&&(n+="g"),t.ignoreCase&&(n+="i"),t.multiline&&(n+="m"),t.unicode&&(n+="u"),t.sticky&&(n+="y"),n}},function(t,n){t.exports=function(t,n,r){var e=void 0===r;switch(n.length){case 0:return e?t():t.call(r);case 1:return e?t(n[0]):t.call(r,n[0]);case 2:return e?t(n[0],n[1]):t.call(r,n[0],n[1]);case 3:return e?t(n[0],n[1],n[2]):t.call(r,n[0],n[1],n[2]);case 4:return e?t(n[0],n[1],n[2],n[3]):t.call(r,n[0],n[1],n[2],n[3])}return t.apply(r,n)}},function(t,n,r){var e=r(6),i=r(45),o=r(7)("match");t.exports=function(t){var n;return e(t)&&(void 0!==(n=t[o])?!!n:"RegExp"==i(t))}},function(t,n,r){var e=r(7)("iterator"),i=!1;try{var o=[7][e]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(t){}t.exports=function(t,n){if(!n&&!i)return!1;var r=!1;try{var o=[7],u=o[e]();u.next=function(){return{done:r=!0}},o[e]=function(){return u},t(o)}catch(t){}return r}},function(t,n,r){t.exports=r(69)||!r(4)(function(){var t=Math.random();__defineSetter__.call(null,t,function(){}),delete r(3)[t]})},function(t,n){n.f=Object.getOwnPropertySymbols},function(t,n,r){var e=r(3),i="__core-js_shared__",o=e[i]||(e[i]={});t.exports=function(t){return o[t]||(o[t]={})}},function(t,n,r){for(var e,i=r(3),o=r(27),u=r(76),c=u("typed_array"),f=u("view"),a=!(!i.ArrayBuffer||!i.DataView),s=a,l=0,h="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");l<9;)(e=i[h[l++]])?(o(e.prototype,c,!0),o(e.prototype,f,!0)):s=!1;t.exports={ABV:a,CONSTR:s,TYPED:c,VIEW:f}},function(t,n){"use strict";var r={versions:function(){var t=window.navigator.userAgent;return{trident:t.indexOf("Trident")>-1,presto:t.indexOf("Presto")>-1,webKit:t.indexOf("AppleWebKit")>-1,gecko:t.indexOf("Gecko")>-1&&-1==t.indexOf("KHTML"),mobile:!!t.match(/AppleWebKit.*Mobile.*/),ios:!!t.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),android:t.indexOf("Android")>-1||t.indexOf("Linux")>-1,iPhone:t.indexOf("iPhone")>-1||t.indexOf("Mac")>-1,iPad:t.indexOf("iPad")>-1,webApp:-1==t.indexOf("Safari"),weixin:-1==t.indexOf("MicroMessenger")}}()};t.exports=r},function(t,n,r){"use strict";var e=r(85),i=function(t){return t&&t.__esModule?t:{default:t}}(e),o=function(){function t(t,n,e){return n||e?String.fromCharCode(n||e):r[t]||t}function n(t){return e[t]}var r={"&quot;":'"',"&lt;":"<","&gt;":">","&amp;":"&","&nbsp;":" "},e={};for(var u in r)e[r[u]]=u;return r["&apos;"]="'",e["'"]="&#39;",{encode:function(t){return t?(""+t).replace(/['<> "&]/g,n).replace(/\r?\n/g,"<br/>").replace(/\s/g,"&nbsp;"):""},decode:function(n){return n?(""+n).replace(/<br\s*\/?>/gi,"\n").replace(/&quot;|&lt;|&gt;|&amp;|&nbsp;|&apos;|&#(\d+);|&#(\d+)/g,t).replace(/\u00a0/g," "):""},encodeBase16:function(t){if(!t)return t;t+="";for(var n=[],r=0,e=t.length;e>r;r++)n.push(t.charCodeAt(r).toString(16).toUpperCase());return n.join("")},encodeBase16forJSON:function(t){if(!t)return t;t=t.replace(/[\u4E00-\u9FBF]/gi,function(t){return escape(t).replace("%u","\\u")});for(var n=[],r=0,e=t.length;e>r;r++)n.push(t.charCodeAt(r).toString(16).toUpperCase());return n.join("")},decodeBase16:function(t){if(!t)return t;t+="";for(var n=[],r=0,e=t.length;e>r;r+=2)n.push(String.fromCharCode("0x"+t.slice(r,r+2)));return n.join("")},encodeObject:function(t){if(t instanceof Array)for(var n=0,r=t.length;r>n;n++)t[n]=o.encodeObject(t[n]);else if("object"==(void 0===t?"undefined":(0,i.default)(t)))for(var e in t)t[e]=o.encodeObject(t[e]);else if("string"==typeof t)return o.encode(t);return t},loadScript:function(t){var n=document.createElement("script");document.getElementsByTagName("body")[0].appendChild(n),n.setAttribute("src",t)},addLoadEvent:function(t){var n=window.onload;"function"!=typeof window.onload?window.onload=t:window.onload=function(){n(),t()}}}}();t.exports=o},function(t,n,r){"use strict";var e=r(17),i=r(75),o=r(16);t.exports=function(t){for(var n=e(this),r=o(n.length),u=arguments.length,c=i(u>1?arguments[1]:void 0,r),f=u>2?arguments[2]:void 0,a=void 0===f?r:i(f,r);a>c;)n[c++]=t;return n}},function(t,n,r){"use strict";var e=r(11),i=r(66);t.exports=function(t,n,r){n in t?e.f(t,n,i(0,r)):t[n]=r}},function(t,n,r){var e=r(6),i=r(3).document,o=e(i)&&e(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,n){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,n,r){var e=r(7)("match");t.exports=function(t){var n=/./;try{"/./"[t](n)}catch(r){try{return n[e]=!1,!"/./"[t](n)}catch(t){}}return!0}},function(t,n,r){t.exports=r(3).document&&document.documentElement},function(t,n,r){var e=r(6),i=r(144).set;t.exports=function(t,n,r){var o,u=n.constructor;return u!==r&&"function"==typeof u&&(o=u.prototype)!==r.prototype&&e(o)&&i&&i(t,o),t}},function(t,n,r){var e=r(80),i=r(7)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(e.Array===t||o[i]===t)}},function(t,n,r){var e=r(45);t.exports=Array.isArray||function(t){return"Array"==e(t)}},function(t,n,r){"use strict";var e=r(70),i=r(66),o=r(81),u={};r(27)(u,r(7)("iterator"),function(){return this}),t.exports=function(t,n,r){t.prototype=e(u,{next:i(1,r)}),o(t,n+" Iterator")}},function(t,n,r){"use strict";var e=r(69),i=r(1),o=r(28),u=r(27),c=r(24),f=r(80),a=r(139),s=r(81),l=r(32),h=r(7)("iterator"),v=!([].keys&&"next"in[].keys()),p="keys",d="values",y=function(){return this};t.exports=function(t,n,r,g,b,m,x){a(r,n,g);var w,S,_,O=function(t){if(!v&&t in F)return F[t];switch(t){case p:case d:return function(){return new r(this,t)}}return function(){return new r(this,t)}},E=n+" Iterator",P=b==d,j=!1,F=t.prototype,M=F[h]||F["@@iterator"]||b&&F[b],A=M||O(b),N=b?P?O("entries"):A:void 0,T="Array"==n?F.entries||M:M;if(T&&(_=l(T.call(new t)))!==Object.prototype&&(s(_,E,!0),e||c(_,h)||u(_,h,y)),P&&M&&M.name!==d&&(j=!0,A=function(){return M.call(this)}),e&&!x||!v&&!j&&F[h]||u(F,h,A),f[n]=A,f[E]=y,b)if(w={values:P?A:O(d),keys:m?A:O(p),entries:N},x)for(S in w)S in F||o(F,S,w[S]);else i(i.P+i.F*(v||j),n,w);return w}},function(t,n){var r=Math.expm1;t.exports=!r||r(10)>22025.465794806718||r(10)<22025.465794806718||-2e-17!=r(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:r},function(t,n){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,n,r){var e=r(3),i=r(151).set,o=e.MutationObserver||e.WebKitMutationObserver,u=e.process,c=e.Promise,f="process"==r(45)(u);t.exports=function(){var t,n,r,a=function(){var e,i;for(f&&(e=u.domain)&&e.exit();t;){i=t.fn,t=t.next;try{i()}catch(e){throw t?r():n=void 0,e}}n=void 0,e&&e.enter()};if(f)r=function(){u.nextTick(a)};else if(o){var s=!0,l=document.createTextNode("");new o(a).observe(l,{characterData:!0}),r=function(){l.data=s=!s}}else if(c&&c.resolve){var h=c.resolve();r=function(){h.then(a)}}else r=function(){i.call(e,a)};return function(e){var i={fn:e,next:void 0};n&&(n.next=i),t||(t=i,r()),n=i}}},function(t,n,r){var e=r(6),i=r(2),o=function(t,n){if(i(t),!e(n)&&null!==n)throw TypeError(n+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,n,e){try{e=r(53)(Function.call,r(31).f(Object.prototype,"__proto__").set,2),e(t,[]),n=!(t instanceof Array)}catch(t){n=!0}return function(t,r){return o(t,r),n?t.__proto__=r:e(t,r),t}}({},!1):void 0),check:o}},function(t,n,r){var e=r(126)("keys"),i=r(76);t.exports=function(t){return e[t]||(e[t]=i(t))}},function(t,n,r){var e=r(2),i=r(26),o=r(7)("species");t.exports=function(t,n){var r,u=e(t).constructor;return void 0===u||void 0==(r=e(u)[o])?n:i(r)}},function(t,n,r){var e=r(67),i=r(46);t.exports=function(t){return function(n,r){var o,u,c=String(i(n)),f=e(r),a=c.length;return f<0||f>=a?t?"":void 0:(o=c.charCodeAt(f),o<55296||o>56319||f+1===a||(u=c.charCodeAt(f+1))<56320||u>57343?t?c.charAt(f):o:t?c.slice(f,f+2):u-56320+(o-55296<<10)+65536)}}},function(t,n,r){var e=r(122),i=r(46);t.exports=function(t,n,r){if(e(n))throw TypeError("String#"+r+" doesn't accept regex!");return String(i(t))}},function(t,n,r){"use strict";var e=r(67),i=r(46);t.exports=function(t){var n=String(i(this)),r="",o=e(t);if(o<0||o==1/0)throw RangeError("Count can't be negative");for(;o>0;(o>>>=1)&&(n+=n))1&o&&(r+=n);return r}},function(t,n){t.exports="\t\n\v\f\r   ᠎             　\u2028\u2029\ufeff"},function(t,n,r){var e,i,o,u=r(53),c=r(121),f=r(135),a=r(132),s=r(3),l=s.process,h=s.setImmediate,v=s.clearImmediate,p=s.MessageChannel,d=0,y={},g="onreadystatechange",b=function(){var t=+this;if(y.hasOwnProperty(t)){var n=y[t];delete y[t],n()}},m=function(t){b.call(t.data)};h&&v||(h=function(t){for(var n=[],r=1;arguments.length>r;)n.push(arguments[r++]);return y[++d]=function(){c("function"==typeof t?t:Function(t),n)},e(d),d},v=function(t){delete y[t]},"process"==r(45)(l)?e=function(t){l.nextTick(u(b,t,1))}:p?(i=new p,o=i.port2,i.port1.onmessage=m,e=u(o.postMessage,o,1)):s.addEventListener&&"function"==typeof postMessage&&!s.importScripts?(e=function(t){s.postMessage(t+"","*")},s.addEventListener("message",m,!1)):e=g in a("script")?function(t){f.appendChild(a("script"))[g]=function(){f.removeChild(this),b.call(t)}}:function(t){setTimeout(u(b,t,1),0)}),t.exports={set:h,clear:v}},function(t,n,r){"use strict";var e=r(3),i=r(10),o=r(69),u=r(127),c=r(27),f=r(73),a=r(4),s=r(68),l=r(67),h=r(16),v=r(71).f,p=r(11).f,d=r(130),y=r(81),g="ArrayBuffer",b="DataView",m="prototype",x="Wrong length!",w="Wrong index!",S=e[g],_=e[b],O=e.Math,E=e.RangeError,P=e.Infinity,j=S,F=O.abs,M=O.pow,A=O.floor,N=O.log,T=O.LN2,I="buffer",k="byteLength",L="byteOffset",R=i?"_b":I,C=i?"_l":k,D=i?"_o":L,U=function(t,n,r){var e,i,o,u=Array(r),c=8*r-n-1,f=(1<<c)-1,a=f>>1,s=23===n?M(2,-24)-M(2,-77):0,l=0,h=t<0||0===t&&1/t<0?1:0;for(t=F(t),t!=t||t===P?(i=t!=t?1:0,e=f):(e=A(N(t)/T),t*(o=M(2,-e))<1&&(e--,o*=2),t+=e+a>=1?s/o:s*M(2,1-a),t*o>=2&&(e++,o/=2),e+a>=f?(i=0,e=f):e+a>=1?(i=(t*o-1)*M(2,n),e+=a):(i=t*M(2,a-1)*M(2,n),e=0));n>=8;u[l++]=255&i,i/=256,n-=8);for(e=e<<n|i,c+=n;c>0;u[l++]=255&e,e/=256,c-=8);return u[--l]|=128*h,u},W=function(t,n,r){var e,i=8*r-n-1,o=(1<<i)-1,u=o>>1,c=i-7,f=r-1,a=t[f--],s=127&a;for(a>>=7;c>0;s=256*s+t[f],f--,c-=8);for(e=s&(1<<-c)-1,s>>=-c,c+=n;c>0;e=256*e+t[f],f--,c-=8);if(0===s)s=1-u;else{if(s===o)return e?NaN:a?-P:P;e+=M(2,n),s-=u}return(a?-1:1)*e*M(2,s-n)},G=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},B=function(t){return[255&t]},V=function(t){return[255&t,t>>8&255]},z=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},q=function(t){return U(t,52,8)},K=function(t){return U(t,23,4)},J=function(t,n,r){p(t[m],n,{get:function(){return this[r]}})},Y=function(t,n,r,e){var i=+r,o=l(i);if(i!=o||o<0||o+n>t[C])throw E(w);var u=t[R]._b,c=o+t[D],f=u.slice(c,c+n);return e?f:f.reverse()},H=function(t,n,r,e,i,o){var u=+r,c=l(u);if(u!=c||c<0||c+n>t[C])throw E(w);for(var f=t[R]._b,a=c+t[D],s=e(+i),h=0;h<n;h++)f[a+h]=s[o?h:n-h-1]},$=function(t,n){s(t,S,g);var r=+n,e=h(r);if(r!=e)throw E(x);return e};if(u.ABV){if(!a(function(){new S})||!a(function(){new S(.5)})){S=function(t){return new j($(this,t))};for(var X,Q=S[m]=j[m],Z=v(j),tt=0;Z.length>tt;)(X=Z[tt++])in S||c(S,X,j[X]);o||(Q.constructor=S)}var nt=new _(new S(2)),rt=_[m].setInt8;nt.setInt8(0,2147483648),nt.setInt8(1,2147483649),!nt.getInt8(0)&&nt.getInt8(1)||f(_[m],{setInt8:function(t,n){rt.call(this,t,n<<24>>24)},setUint8:function(t,n){rt.call(this,t,n<<24>>24)}},!0)}else S=function(t){var n=$(this,t);this._b=d.call(Array(n),0),this[C]=n},_=function(t,n,r){s(this,_,b),s(t,S,b);var e=t[C],i=l(n);if(i<0||i>e)throw E("Wrong offset!");if(r=void 0===r?e-i:h(r),i+r>e)throw E(x);this[R]=t,this[D]=i,this[C]=r},i&&(J(S,k,"_l"),J(_,I,"_b"),J(_,k,"_l"),J(_,L,"_o")),f(_[m],{getInt8:function(t){return Y(this,1,t)[0]<<24>>24},getUint8:function(t){return Y(this,1,t)[0]},getInt16:function(t){var n=Y(this,2,t,arguments[1]);return(n[1]<<8|n[0])<<16>>16},getUint16:function(t){var n=Y(this,2,t,arguments[1]);return n[1]<<8|n[0]},getInt32:function(t){return G(Y(this,4,t,arguments[1]))},getUint32:function(t){return G(Y(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return W(Y(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return W(Y(this,8,t,arguments[1]),52,8)},setInt8:function(t,n){H(this,1,t,B,n)},setUint8:function(t,n){H(this,1,t,B,n)},setInt16:function(t,n){H(this,2,t,V,n,arguments[2])},setUint16:function(t,n){H(this,2,t,V,n,arguments[2])},setInt32:function(t,n){H(this,4,t,z,n,arguments[2])},setUint32:function(t,n){H(this,4,t,z,n,arguments[2])},setFloat32:function(t,n){H(this,4,t,K,n,arguments[2])},setFloat64:function(t,n){H(this,8,t,q,n,arguments[2])}});y(S,g),y(_,b),c(_[m],u.VIEW,!0),n[g]=S,n[b]=_},function(t,n,r){var e=r(3),i=r(52),o=r(69),u=r(182),c=r(11).f;t.exports=function(t){var n=i.Symbol||(i.Symbol=o?{}:e.Symbol||{});"_"==t.charAt(0)||t in n||c(n,t,{value:u.f(t)})}},function(t,n,r){var e=r(114),i=r(7)("iterator"),o=r(80);t.exports=r(52).getIteratorMethod=function(t){if(void 0!=t)return t[i]||t["@@iterator"]||o[e(t)]}},function(t,n,r){"use strict";var e=r(78),i=r(170),o=r(80),u=r(30);t.exports=r(140)(Array,"Array",function(t,n){this._t=u(t),this._i=0,this._k=n},function(){var t=this._t,n=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,i(1)):"keys"==n?i(0,r):"values"==n?i(0,t[r]):i(0,[r,t[r]])},"values"),o.Arguments=o.Array,e("keys"),e("values"),e("entries")},function(t,n){function r(t,n){t.classList?t.classList.add(n):t.className+=" "+n}t.exports=r},function(t,n){function r(t,n){if(t.classList)t.classList.remove(n);else{var r=new RegExp("(^|\\b)"+n.split(" ").join("|")+"(\\b|$)","gi");t.className=t.className.replace(r," ")}}t.exports=r},function(t,n){function r(){throw new Error("setTimeout has not been defined")}function e(){throw new Error("clearTimeout has not been defined")}function i(t){if(s===setTimeout)return setTimeout(t,0);if((s===r||!s)&&setTimeout)return s=setTimeout,setTimeout(t,0);try{return s(t,0)}catch(n){try{return s.call(null,t,0)}catch(n){return s.call(this,t,0)}}}function o(t){if(l===clearTimeout)return clearTimeout(t);if((l===e||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(t);try{return l(t)}catch(n){try{return l.call(null,t)}catch(n){return l.call(this,t)}}}function u(){d&&v&&(d=!1,v.length?p=v.concat(p):y=-1,p.length&&c())}function c(){if(!d){var t=i(u);d=!0;for(var n=p.length;n;){for(v=p,p=[];++y<n;)v&&v[y].run();y=-1,n=p.length}v=null,d=!1,o(t)}}function f(t,n){this.fun=t,this.array=n}function a(){}var s,l,h=t.exports={};!function(){try{s="function"==typeof setTimeout?setTimeout:r}catch(t){s=r}try{l="function"==typeof clearTimeout?clearTimeout:e}catch(t){l=e}}();var v,p=[],d=!1,y=-1;h.nextTick=function(t){var n=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)n[r-1]=arguments[r];p.push(new f(t,n)),1!==p.length||d||i(c)},f.prototype.run=function(){this.fun.apply(null,this.array)},h.title="browser",h.browser=!0,h.env={},h.argv=[],h.version="",h.versions={},h.on=a,h.addListener=a,h.once=a,h.off=a,h.removeListener=a,h.removeAllListeners=a,h.emit=a,h.prependListener=a,h.prependOnceListener=a,h.listeners=function(t){return[]},h.binding=function(t){throw new Error("process.binding is not supported")},h.cwd=function(){return"/"},h.chdir=function(t){throw new Error("process.chdir is not supported")},h.umask=function(){return 0}},function(t,n,r){var e=r(45);t.exports=function(t,n){if("number"!=typeof t&&"Number"!=e(t))throw TypeError(n);return+t}},function(t,n,r){"use strict";var e=r(17),i=r(75),o=r(16);t.exports=[].copyWithin||function(t,n){var r=e(this),u=o(r.length),c=i(t,u),f=i(n,u),a=arguments.length>2?arguments[2]:void 0,s=Math.min((void 0===a?u:i(a,u))-f,u-c),l=1;for(f<c&&c<f+s&&(l=-1,f+=s-1,c+=s-1);s-- >0;)f in r?r[c]=r[f]:delete r[c],c+=l,f+=l;return r}},function(t,n,r){var e=r(79);t.exports=function(t,n){var r=[];return e(t,!1,r.push,r,n),r}},function(t,n,r){var e=r(26),i=r(17),o=r(115),u=r(16);t.exports=function(t,n,r,c,f){e(n);var a=i(t),s=o(a),l=u(a.length),h=f?l-1:0,v=f?-1:1;if(r<2)for(;;){if(h in s){c=s[h],h+=v;break}if(h+=v,f?h<0:l<=h)throw TypeError("Reduce of empty array with no initial value")}for(;f?h>=0:l>h;h+=v)h in s&&(c=n(c,s[h],h,a));return c}},function(t,n,r){"use strict";var e=r(26),i=r(6),o=r(121),u=[].slice,c={},f=function(t,n,r){if(!(n in c)){for(var e=[],i=0;i<n;i++)e[i]="a["+i+"]";c[n]=Function("F,a","return new F("+e.join(",")+")")}return c[n](t,r)};t.exports=Function.bind||function(t){var n=e(this),r=u.call(arguments,1),c=function(){var e=r.concat(u.call(arguments));return this instanceof c?f(n,e.length,e):o(n,e,t)};return i(n.prototype)&&(c.prototype=n.prototype),c}},function(t,n,r){"use strict";var e=r(11).f,i=r(70),o=r(73),u=r(53),c=r(68),f=r(46),a=r(79),s=r(140),l=r(170),h=r(74),v=r(10),p=r(65).fastKey,d=v?"_s":"size",y=function(t,n){var r,e=p(n);if("F"!==e)return t._i[e];for(r=t._f;r;r=r.n)if(r.k==n)return r};t.exports={getConstructor:function(t,n,r,s){var l=t(function(t,e){c(t,l,n,"_i"),t._i=i(null),t._f=void 0,t._l=void 0,t[d]=0,void 0!=e&&a(e,r,t[s],t)});return o(l.prototype,{clear:function(){for(var t=this,n=t._i,r=t._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];t._f=t._l=void 0,t[d]=0},delete:function(t){var n=this,r=y(n,t);if(r){var e=r.n,i=r.p;delete n._i[r.i],r.r=!0,i&&(i.n=e),e&&(e.p=i),n._f==r&&(n._f=e),n._l==r&&(n._l=i),n[d]--}return!!r},forEach:function(t){c(this,l,"forEach");for(var n,r=u(t,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(t){return!!y(this,t)}}),v&&e(l.prototype,"size",{get:function(){return f(this[d])}}),l},def:function(t,n,r){var e,i,o=y(t,n);return o?o.v=r:(t._l=o={i:i=p(n,!0),k:n,v:r,p:e=t._l,n:void 0,r:!1},t._f||(t._f=o),e&&(e.n=o),t[d]++,"F"!==i&&(t._i[i]=o)),t},getEntry:y,setStrong:function(t,n,r){s(t,n,function(t,n){this._t=t,this._k=n,this._l=void 0},function(){for(var t=this,n=t._k,r=t._l;r&&r.r;)r=r.p;return t._t&&(t._l=r=r?r.n:t._t._f)?"keys"==n?l(0,r.k):"values"==n?l(0,r.v):l(0,[r.k,r.v]):(t._t=void 0,l(1))},r?"entries":"values",!r,!0),h(n)}}},function(t,n,r){var e=r(114),i=r(161);t.exports=function(t){return function(){if(e(this)!=t)throw TypeError(t+"#toJSON isn't generic");return i(this)}}},function(t,n,r){"use strict";var e=r(73),i=r(65).getWeak,o=r(2),u=r(6),c=r(68),f=r(79),a=r(48),s=r(24),l=a(5),h=a(6),v=0,p=function(t){return t._l||(t._l=new d)},d=function(){this.a=[]},y=function(t,n){return l(t.a,function(t){return t[0]===n})};d.prototype={get:function(t){var n=y(this,t);if(n)return n[1]},has:function(t){return!!y(this,t)},set:function(t,n){var r=y(this,t);r?r[1]=n:this.a.push([t,n])},delete:function(t){var n=h(this.a,function(n){return n[0]===t});return~n&&this.a.splice(n,1),!!~n}},t.exports={getConstructor:function(t,n,r,o){var a=t(function(t,e){c(t,a,n,"_i"),t._i=v++,t._l=void 0,void 0!=e&&f(e,r,t[o],t)});return e(a.prototype,{delete:function(t){if(!u(t))return!1;var n=i(t);return!0===n?p(this).delete(t):n&&s(n,this._i)&&delete n[this._i]},has:function(t){if(!u(t))return!1;var n=i(t);return!0===n?p(this).has(t):n&&s(n,this._i)}}),a},def:function(t,n,r){var e=i(o(n),!0);return!0===e?p(t).set(n,r):e[t._i]=r,t},ufstore:p}},function(t,n,r){t.exports=!r(10)&&!r(4)(function(){return 7!=Object.defineProperty(r(132)("div"),"a",{get:function(){return 7}}).a})},function(t,n,r){var e=r(6),i=Math.floor;t.exports=function(t){return!e(t)&&isFinite(t)&&i(t)===t}},function(t,n,r){var e=r(2);t.exports=function(t,n,r,i){try{return i?n(e(r)[0],r[1]):n(r)}catch(n){var o=t.return;throw void 0!==o&&e(o.call(t)),n}}},function(t,n){t.exports=function(t,n){return{value:n,done:!!t}}},function(t,n){t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)}},function(t,n,r){"use strict";var e=r(72),i=r(125),o=r(116),u=r(17),c=r(115),f=Object.assign;t.exports=!f||r(4)(function(){var t={},n={},r=Symbol(),e="abcdefghijklmnopqrst";return t[r]=7,e.split("").forEach(function(t){n[t]=t}),7!=f({},t)[r]||Object.keys(f({},n)).join("")!=e})?function(t,n){for(var r=u(t),f=arguments.length,a=1,s=i.f,l=o.f;f>a;)for(var h,v=c(arguments[a++]),p=s?e(v).concat(s(v)):e(v),d=p.length,y=0;d>y;)l.call(v,h=p[y++])&&(r[h]=v[h]);return r}:f},function(t,n,r){var e=r(11),i=r(2),o=r(72);t.exports=r(10)?Object.defineProperties:function(t,n){i(t);for(var r,u=o(n),c=u.length,f=0;c>f;)e.f(t,r=u[f++],n[r]);return t}},function(t,n,r){var e=r(30),i=r(71).f,o={}.toString,u="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],c=function(t){try{return i(t)}catch(t){return u.slice()}};t.exports.f=function(t){return u&&"[object Window]"==o.call(t)?c(t):i(e(t))}},function(t,n,r){var e=r(24),i=r(30),o=r(117)(!1),u=r(145)("IE_PROTO");t.exports=function(t,n){var r,c=i(t),f=0,a=[];for(r in c)r!=u&&e(c,r)&&a.push(r);for(;n.length>f;)e(c,r=n[f++])&&(~o(a,r)||a.push(r));return a}},function(t,n,r){var e=r(72),i=r(30),o=r(116).f;t.exports=function(t){return function(n){for(var r,u=i(n),c=e(u),f=c.length,a=0,s=[];f>a;)o.call(u,r=c[a++])&&s.push(t?[r,u[r]]:u[r]);return s}}},function(t,n,r){var e=r(71),i=r(125),o=r(2),u=r(3).Reflect;t.exports=u&&u.ownKeys||function(t){var n=e.f(o(t)),r=i.f;return r?n.concat(r(t)):n}},function(t,n,r){var e=r(3).parseFloat,i=r(82).trim;t.exports=1/e(r(150)+"-0")!=-1/0?function(t){var n=i(String(t),3),r=e(n);return 0===r&&"-"==n.charAt(0)?-0:r}:e},function(t,n,r){var e=r(3).parseInt,i=r(82).trim,o=r(150),u=/^[\-+]?0[xX]/;t.exports=8!==e(o+"08")||22!==e(o+"0x16")?function(t,n){var r=i(String(t),3);return e(r,n>>>0||(u.test(r)?16:10))}:e},function(t,n){t.exports=Object.is||function(t,n){return t===n?0!==t||1/t==1/n:t!=t&&n!=n}},function(t,n,r){var e=r(16),i=r(149),o=r(46);t.exports=function(t,n,r,u){var c=String(o(t)),f=c.length,a=void 0===r?" ":String(r),s=e(n);if(s<=f||""==a)return c;var l=s-f,h=i.call(a,Math.ceil(l/a.length));return h.length>l&&(h=h.slice(0,l)),u?h+c:c+h}},function(t,n,r){n.f=r(7)},function(t,n,r){"use strict";var e=r(164);t.exports=r(118)("Map",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var n=e.getEntry(this,t);return n&&n.v},set:function(t,n){return e.def(this,0===t?0:t,n)}},e,!0)},function(t,n,r){r(10)&&"g"!=/./g.flags&&r(11).f(RegExp.prototype,"flags",{configurable:!0,get:r(120)})},function(t,n,r){"use strict";var e=r(164);t.exports=r(118)("Set",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return e.def(this,t=0===t?0:t,t)}},e)},function(t,n,r){"use strict";var e,i=r(48)(0),o=r(28),u=r(65),c=r(172),f=r(166),a=r(6),s=u.getWeak,l=Object.isExtensible,h=f.ufstore,v={},p=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},d={get:function(t){if(a(t)){var n=s(t);return!0===n?h(this).get(t):n?n[this._i]:void 0}},set:function(t,n){return f.def(this,t,n)}},y=t.exports=r(118)("WeakMap",p,d,f,!0,!0);7!=(new y).set((Object.freeze||Object)(v),7).get(v)&&(e=f.getConstructor(p),c(e.prototype,d),u.NEED=!0,i(["delete","has","get","set"],function(t){var n=y.prototype,r=n[t];o(n,t,function(n,i){if(a(n)&&!l(n)){this._f||(this._f=new e);var o=this._f[t](n,i);return"set"==t?this:o}return r.call(this,n,i)})}))},,,,function(t,n){"use strict";function r(){var t=document.querySelector("#page-nav");if(t&&!document.querySelector("#page-nav .extend.prev")&&(t.innerHTML='<a class="extend prev disabled" rel="prev">&laquo; Prev</a>'+t.innerHTML),t&&!document.querySelector("#page-nav .extend.next")&&(t.innerHTML=t.innerHTML+'<a class="extend next disabled" rel="next">Next &raquo;</a>'),yiliaConfig&&yiliaConfig.open_in_new){document.querySelectorAll(".article-entry a:not(.article-more-a)").forEach(function(t){var n=t.getAttribute("target");n&&""!==n||t.setAttribute("target","_blank")})}if(yiliaConfig&&yiliaConfig.toc_hide_index){document.querySelectorAll(".toc-number").forEach(function(t){t.style.display="none"})}var n=document.querySelector("#js-aboutme");n&&0!==n.length&&(n.innerHTML=n.innerText)}t.exports={init:r}},function(t,n,r){"use strict";function e(t){return t&&t.__esModule?t:{default:t}}function i(t,n){var r=/\/|index.html/g;return t.replace(r,"")===n.replace(r,"")}function o(){for(var t=document.querySelectorAll(".js-header-menu li a"),n=window.location.pathname,r=0,e=t.length;r<e;r++){var o=t[r];i(n,o.getAttribute("href"))&&(0,h.default)(o,"active")}}function u(t){for(var n=t.offsetLeft,r=t.offsetParent;null!==r;)n+=r.offsetLeft,r=r.offsetParent;return n}function c(t){for(var n=t.offsetTop,r=t.offsetParent;null!==r;)n+=r.offsetTop,r=r.offsetParent;return n}function f(t,n,r,e,i){var o=u(t),f=c(t)-n;if(f-r<=i){var a=t.$newDom;a||(a=t.cloneNode(!0),(0,d.default)(t,a),t.$newDom=a,a.style.position="fixed",a.style.top=(r||f)+"px",a.style.left=o+"px",a.style.zIndex=e||2,a.style.width="100%",a.style.color="#fff"),a.style.visibility="visible",t.style.visibility="hidden"}else{t.style.visibility="visible";var s=t.$newDom;s&&(s.style.visibility="hidden")}}function a(){var t=document.querySelector(".js-overlay"),n=document.querySelector(".js-header-menu");f(t,document.body.scrollTop,-63,2,0),f(n,document.body.scrollTop,1,3,0)}function s(){document.querySelector("#container").addEventListener("scroll",function(t){a()}),window.addEventListener("scroll",function(t){a()}),a()}var l=r(156),h=e(l),v=r(157),p=(e(v),r(382)),d=e(p),y=r(128),g=e(y),b=r(190),m=e(b),x=r(129);(function(){g.default.versions.mobile&&window.screen.width<800&&(o(),s())})(),(0,x.addLoadEvent)(function(){m.default.init()}),t.exports={}},,,,function(t,n,r){(function(t){"use strict";function n(t,n,r){t[n]||Object[e](t,n,{writable:!0,configurable:!0,value:r})}if(r(381),r(391),r(198),t._babelPolyfill)throw new Error("only one instance of babel-polyfill is allowed");t._babelPolyfill=!0;var e="defineProperty";n(String.prototype,"padLeft","".padStart),n(String.prototype,"padRight","".padEnd),"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function(t){[][t]&&n(Array,t,Function.call.bind([][t]))})}).call(n,function(){return this}())},,,function(t,n,r){r(210),t.exports=r(52).RegExp.escape},,,,function(t,n,r){var e=r(6),i=r(138),o=r(7)("species");t.exports=function(t){var n;return i(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!i(n.prototype)||(n=void 0),e(n)&&null===(n=n[o])&&(n=void 0)),void 0===n?Array:n}},function(t,n,r){var e=r(202);t.exports=function(t,n){return new(e(t))(n)}},function(t,n,r){"use strict";var e=r(2),i=r(50),o="number";t.exports=function(t){if("string"!==t&&t!==o&&"default"!==t)throw TypeError("Incorrect hint");return i(e(this),t!=o)}},function(t,n,r){var e=r(72),i=r(125),o=r(116);t.exports=function(t){var n=e(t),r=i.f;if(r)for(var u,c=r(t),f=o.f,a=0;c.length>a;)f.call(t,u=c[a++])&&n.push(u);return n}},function(t,n,r){var e=r(72),i=r(30);t.exports=function(t,n){for(var r,o=i(t),u=e(o),c=u.length,f=0;c>f;)if(o[r=u[f++]]===n)return r}},function(t,n,r){"use strict";var e=r(208),i=r(121),o=r(26);t.exports=function(){for(var t=o(this),n=arguments.length,r=Array(n),u=0,c=e._,f=!1;n>u;)(r[u]=arguments[u++])===c&&(f=!0);return function(){var e,o=this,u=arguments.length,a=0,s=0;if(!f&&!u)return i(t,r,o);if(e=r.slice(),f)for(;n>a;a++)e[a]===c&&(e[a]=arguments[s++]);for(;u>s;)e.push(arguments[s++]);return i(t,e,o)}}},function(t,n,r){t.exports=r(3)},function(t,n){t.exports=function(t,n){var r=n===Object(n)?function(t){return n[t]}:n;return function(n){return String(n).replace(t,r)}}},function(t,n,r){var e=r(1),i=r(209)(/[\\^$*+?.()|[\]{}]/g,"\\$&");e(e.S,"RegExp",{escape:function(t){return i(t)}})},function(t,n,r){var e=r(1);e(e.P,"Array",{copyWithin:r(160)}),r(78)("copyWithin")},function(t,n,r){"use strict";var e=r(1),i=r(48)(4);e(e.P+e.F*!r(47)([].every,!0),"Array",{every:function(t){return i(this,t,arguments[1])}})},function(t,n,r){var e=r(1);e(e.P,"Array",{fill:r(130)}),r(78)("fill")},function(t,n,r){"use strict";var e=r(1),i=r(48)(2);e(e.P+e.F*!r(47)([].filter,!0),"Array",{filter:function(t){return i(this,t,arguments[1])}})},function(t,n,r){"use strict";var e=r(1),i=r(48)(6),o="findIndex",u=!0;o in[]&&Array(1)[o](function(){u=!1}),e(e.P+e.F*u,"Array",{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(78)(o)},function(t,n,r){"use strict";var e=r(1),i=r(48)(5),o="find",u=!0;o in[]&&Array(1)[o](function(){u=!1}),e(e.P+e.F*u,"Array",{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(78)(o)},function(t,n,r){"use strict";var e=r(1),i=r(48)(0),o=r(47)([].forEach,!0);e(e.P+e.F*!o,"Array",{forEach:function(t){return i(this,t,arguments[1])}})},function(t,n,r){"use strict";var e=r(53),i=r(1),o=r(17),u=r(169),c=r(137),f=r(16),a=r(131),s=r(154);i(i.S+i.F*!r(123)(function(t){Array.from(t)}),"Array",{from:function(t){var n,r,i,l,h=o(t),v="function"==typeof this?this:Array,p=arguments.length,d=p>1?arguments[1]:void 0,y=void 0!==d,g=0,b=s(h);if(y&&(d=e(d,p>2?arguments[2]:void 0,2)),void 0==b||v==Array&&c(b))for(n=f(h.length),r=new v(n);n>g;g++)a(r,g,y?d(h[g],g):h[g]);else for(l=b.call(h),r=new v;!(i=l.next()).done;g++)a(r,g,y?u(l,d,[i.value,g],!0):i.value);return r.length=g,r}})},function(t,n,r){"use strict";var e=r(1),i=r(117)(!1),o=[].indexOf,u=!!o&&1/[1].indexOf(1,-0)<0;e(e.P+e.F*(u||!r(47)(o)),"Array",{indexOf:function(t){return u?o.apply(this,arguments)||0:i(this,t,arguments[1])}})},function(t,n,r){var e=r(1);e(e.S,"Array",{isArray:r(138)})},function(t,n,r){"use strict";var e=r(1),i=r(30),o=[].join;e(e.P+e.F*(r(115)!=Object||!r(47)(o)),"Array",{join:function(t){return o.call(i(this),void 0===t?",":t)}})},function(t,n,r){"use strict";var e=r(1),i=r(30),o=r(67),u=r(16),c=[].lastIndexOf,f=!!c&&1/[1].lastIndexOf(1,-0)<0;e(e.P+e.F*(f||!r(47)(c)),"Array",{lastIndexOf:function(t){if(f)return c.apply(this,arguments)||0;var n=i(this),r=u(n.length),e=r-1;for(arguments.length>1&&(e=Math.min(e,o(arguments[1]))),e<0&&(e=r+e);e>=0;e--)if(e in n&&n[e]===t)return e||0;return-1}})},function(t,n,r){"use strict";var e=r(1),i=r(48)(1);e(e.P+e.F*!r(47)([].map,!0),"Array",{map:function(t){return i(this,t,arguments[1])}})},function(t,n,r){"use strict";var e=r(1),i=r(131);e(e.S+e.F*r(4)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,n=arguments.length,r=new("function"==typeof this?this:Array)(n);n>t;)i(r,t,arguments[t++]);return r.length=n,r}})},function(t,n,r){"use strict";var e=r(1),i=r(162);e(e.P+e.F*!r(47)([].reduceRight,!0),"Array",{reduceRight:function(t){return i(this,t,arguments.length,arguments[1],!0)}})},function(t,n,r){"use strict";var e=r(1),i=r(162);e(e.P+e.F*!r(47)([].reduce,!0),"Array",{reduce:function(t){return i(this,t,arguments.length,arguments[1],!1)}})},function(t,n,r){"use strict";var e=r(1),i=r(135),o=r(45),u=r(75),c=r(16),f=[].slice;e(e.P+e.F*r(4)(function(){i&&f.call(i)}),"Array",{slice:function(t,n){var r=c(this.length),e=o(this);if(n=void 0===n?r:n,"Array"==e)return f.call(this,t,n);for(var i=u(t,r),a=u(n,r),s=c(a-i),l=Array(s),h=0;h<s;h++)l[h]="String"==e?this.charAt(i+h):this[i+h];return l}})},function(t,n,r){"use strict";var e=r(1),i=r(48)(3);e(e.P+e.F*!r(47)([].some,!0),"Array",{some:function(t){return i(this,t,arguments[1])}})},function(t,n,r){"use strict";var e=r(1),i=r(26),o=r(17),u=r(4),c=[].sort,f=[1,2,3];e(e.P+e.F*(u(function(){f.sort(void 0)})||!u(function(){f.sort(null)})||!r(47)(c)),"Array",{sort:function(t){return void 0===t?c.call(o(this)):c.call(o(this),i(t))}})},function(t,n,r){r(74)("Array")},function(t,n,r){var e=r(1);e(e.S,"Date",{now:function(){return(new Date).getTime()}})},function(t,n,r){"use strict";var e=r(1),i=r(4),o=Date.prototype.getTime,u=function(t){return t>9?t:"0"+t};e(e.P+e.F*(i(function(){return"0385-07-25T07:06:39.999Z"!=new Date(-5e13-1).toISOString()})||!i(function(){new Date(NaN).toISOString()})),"Date",{toISOString:function(){
if(!isFinite(o.call(this)))throw RangeError("Invalid time value");var t=this,n=t.getUTCFullYear(),r=t.getUTCMilliseconds(),e=n<0?"-":n>9999?"+":"";return e+("00000"+Math.abs(n)).slice(e?-6:-4)+"-"+u(t.getUTCMonth()+1)+"-"+u(t.getUTCDate())+"T"+u(t.getUTCHours())+":"+u(t.getUTCMinutes())+":"+u(t.getUTCSeconds())+"."+(r>99?r:"0"+u(r))+"Z"}})},function(t,n,r){"use strict";var e=r(1),i=r(17),o=r(50);e(e.P+e.F*r(4)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function(t){var n=i(this),r=o(n);return"number"!=typeof r||isFinite(r)?n.toISOString():null}})},function(t,n,r){var e=r(7)("toPrimitive"),i=Date.prototype;e in i||r(27)(i,e,r(204))},function(t,n,r){var e=Date.prototype,i="Invalid Date",o="toString",u=e[o],c=e.getTime;new Date(NaN)+""!=i&&r(28)(e,o,function(){var t=c.call(this);return t===t?u.call(this):i})},function(t,n,r){var e=r(1);e(e.P,"Function",{bind:r(163)})},function(t,n,r){"use strict";var e=r(6),i=r(32),o=r(7)("hasInstance"),u=Function.prototype;o in u||r(11).f(u,o,{value:function(t){if("function"!=typeof this||!e(t))return!1;if(!e(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},function(t,n,r){var e=r(11).f,i=r(66),o=r(24),u=Function.prototype,c="name",f=Object.isExtensible||function(){return!0};c in u||r(10)&&e(u,c,{configurable:!0,get:function(){try{var t=this,n=(""+t).match(/^\s*function ([^ (]*)/)[1];return o(t,c)||!f(t)||e(t,c,i(5,n)),n}catch(t){return""}}})},function(t,n,r){var e=r(1),i=r(171),o=Math.sqrt,u=Math.acosh;e(e.S+e.F*!(u&&710==Math.floor(u(Number.MAX_VALUE))&&u(1/0)==1/0),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:i(t-1+o(t-1)*o(t+1))}})},function(t,n,r){function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}var i=r(1),o=Math.asinh;i(i.S+i.F*!(o&&1/o(0)>0),"Math",{asinh:e})},function(t,n,r){var e=r(1),i=Math.atanh;e(e.S+e.F*!(i&&1/i(-0)<0),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},function(t,n,r){var e=r(1),i=r(142);e(e.S,"Math",{cbrt:function(t){return i(t=+t)*Math.pow(Math.abs(t),1/3)}})},function(t,n,r){var e=r(1);e(e.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},function(t,n,r){var e=r(1),i=Math.exp;e(e.S,"Math",{cosh:function(t){return(i(t=+t)+i(-t))/2}})},function(t,n,r){var e=r(1),i=r(141);e(e.S+e.F*(i!=Math.expm1),"Math",{expm1:i})},function(t,n,r){var e=r(1),i=r(142),o=Math.pow,u=o(2,-52),c=o(2,-23),f=o(2,127)*(2-c),a=o(2,-126),s=function(t){return t+1/u-1/u};e(e.S,"Math",{fround:function(t){var n,r,e=Math.abs(t),o=i(t);return e<a?o*s(e/a/c)*a*c:(n=(1+c/u)*e,r=n-(n-e),r>f||r!=r?o*(1/0):o*r)}})},function(t,n,r){var e=r(1),i=Math.abs;e(e.S,"Math",{hypot:function(t,n){for(var r,e,o=0,u=0,c=arguments.length,f=0;u<c;)r=i(arguments[u++]),f<r?(e=f/r,o=o*e*e+1,f=r):r>0?(e=r/f,o+=e*e):o+=r;return f===1/0?1/0:f*Math.sqrt(o)}})},function(t,n,r){var e=r(1),i=Math.imul;e(e.S+e.F*r(4)(function(){return-5!=i(4294967295,5)||2!=i.length}),"Math",{imul:function(t,n){var r=65535,e=+t,i=+n,o=r&e,u=r&i;return 0|o*u+((r&e>>>16)*u+o*(r&i>>>16)<<16>>>0)}})},function(t,n,r){var e=r(1);e(e.S,"Math",{log10:function(t){return Math.log(t)/Math.LN10}})},function(t,n,r){var e=r(1);e(e.S,"Math",{log1p:r(171)})},function(t,n,r){var e=r(1);e(e.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},function(t,n,r){var e=r(1);e(e.S,"Math",{sign:r(142)})},function(t,n,r){var e=r(1),i=r(141),o=Math.exp;e(e.S+e.F*r(4)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},function(t,n,r){var e=r(1),i=r(141),o=Math.exp;e(e.S,"Math",{tanh:function(t){var n=i(t=+t),r=i(-t);return n==1/0?1:r==1/0?-1:(n-r)/(o(t)+o(-t))}})},function(t,n,r){var e=r(1);e(e.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},function(t,n,r){"use strict";var e=r(3),i=r(24),o=r(45),u=r(136),c=r(50),f=r(4),a=r(71).f,s=r(31).f,l=r(11).f,h=r(82).trim,v="Number",p=e[v],d=p,y=p.prototype,g=o(r(70)(y))==v,b="trim"in String.prototype,m=function(t){var n=c(t,!1);if("string"==typeof n&&n.length>2){n=b?n.trim():h(n,3);var r,e,i,o=n.charCodeAt(0);if(43===o||45===o){if(88===(r=n.charCodeAt(2))||120===r)return NaN}else if(48===o){switch(n.charCodeAt(1)){case 66:case 98:e=2,i=49;break;case 79:case 111:e=8,i=55;break;default:return+n}for(var u,f=n.slice(2),a=0,s=f.length;a<s;a++)if((u=f.charCodeAt(a))<48||u>i)return NaN;return parseInt(f,e)}}return+n};if(!p(" 0o1")||!p("0b1")||p("+0x1")){p=function(t){var n=arguments.length<1?0:t,r=this;return r instanceof p&&(g?f(function(){y.valueOf.call(r)}):o(r)!=v)?u(new d(m(n)),r,p):m(n)};for(var x,w=r(10)?a(d):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),S=0;w.length>S;S++)i(d,x=w[S])&&!i(p,x)&&l(p,x,s(d,x));p.prototype=y,y.constructor=p,r(28)(e,v,p)}},function(t,n,r){var e=r(1);e(e.S,"Number",{EPSILON:Math.pow(2,-52)})},function(t,n,r){var e=r(1),i=r(3).isFinite;e(e.S,"Number",{isFinite:function(t){return"number"==typeof t&&i(t)}})},function(t,n,r){var e=r(1);e(e.S,"Number",{isInteger:r(168)})},function(t,n,r){var e=r(1);e(e.S,"Number",{isNaN:function(t){return t!=t}})},function(t,n,r){var e=r(1),i=r(168),o=Math.abs;e(e.S,"Number",{isSafeInteger:function(t){return i(t)&&o(t)<=9007199254740991}})},function(t,n,r){var e=r(1);e(e.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(t,n,r){var e=r(1);e(e.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(t,n,r){var e=r(1),i=r(178);e(e.S+e.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},function(t,n,r){var e=r(1),i=r(179);e(e.S+e.F*(Number.parseInt!=i),"Number",{parseInt:i})},function(t,n,r){"use strict";var e=r(1),i=r(67),o=r(159),u=r(149),c=1..toFixed,f=Math.floor,a=[0,0,0,0,0,0],s="Number.toFixed: incorrect invocation!",l="0",h=function(t,n){for(var r=-1,e=n;++r<6;)e+=t*a[r],a[r]=e%1e7,e=f(e/1e7)},v=function(t){for(var n=6,r=0;--n>=0;)r+=a[n],a[n]=f(r/t),r=r%t*1e7},p=function(){for(var t=6,n="";--t>=0;)if(""!==n||0===t||0!==a[t]){var r=String(a[t]);n=""===n?r:n+u.call(l,7-r.length)+r}return n},d=function(t,n,r){return 0===n?r:n%2==1?d(t,n-1,r*t):d(t*t,n/2,r)},y=function(t){for(var n=0,r=t;r>=4096;)n+=12,r/=4096;for(;r>=2;)n+=1,r/=2;return n};e(e.P+e.F*(!!c&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!r(4)(function(){c.call({})})),"Number",{toFixed:function(t){var n,r,e,c,f=o(this,s),a=i(t),g="",b=l;if(a<0||a>20)throw RangeError(s);if(f!=f)return"NaN";if(f<=-1e21||f>=1e21)return String(f);if(f<0&&(g="-",f=-f),f>1e-21)if(n=y(f*d(2,69,1))-69,r=n<0?f*d(2,-n,1):f/d(2,n,1),r*=4503599627370496,(n=52-n)>0){for(h(0,r),e=a;e>=7;)h(1e7,0),e-=7;for(h(d(10,e,1),0),e=n-1;e>=23;)v(1<<23),e-=23;v(1<<e),h(1,1),v(2),b=p()}else h(0,r),h(1<<-n,0),b=p()+u.call(l,a);return a>0?(c=b.length,b=g+(c<=a?"0."+u.call(l,a-c)+b:b.slice(0,c-a)+"."+b.slice(c-a))):b=g+b,b}})},function(t,n,r){"use strict";var e=r(1),i=r(4),o=r(159),u=1..toPrecision;e(e.P+e.F*(i(function(){return"1"!==u.call(1,void 0)})||!i(function(){u.call({})})),"Number",{toPrecision:function(t){var n=o(this,"Number#toPrecision: incorrect invocation!");return void 0===t?u.call(n):u.call(n,t)}})},function(t,n,r){var e=r(1);e(e.S+e.F,"Object",{assign:r(172)})},function(t,n,r){var e=r(1);e(e.S,"Object",{create:r(70)})},function(t,n,r){var e=r(1);e(e.S+e.F*!r(10),"Object",{defineProperties:r(173)})},function(t,n,r){var e=r(1);e(e.S+e.F*!r(10),"Object",{defineProperty:r(11).f})},function(t,n,r){var e=r(6),i=r(65).onFreeze;r(49)("freeze",function(t){return function(n){return t&&e(n)?t(i(n)):n}})},function(t,n,r){var e=r(30),i=r(31).f;r(49)("getOwnPropertyDescriptor",function(){return function(t,n){return i(e(t),n)}})},function(t,n,r){r(49)("getOwnPropertyNames",function(){return r(174).f})},function(t,n,r){var e=r(17),i=r(32);r(49)("getPrototypeOf",function(){return function(t){return i(e(t))}})},function(t,n,r){var e=r(6);r(49)("isExtensible",function(t){return function(n){return!!e(n)&&(!t||t(n))}})},function(t,n,r){var e=r(6);r(49)("isFrozen",function(t){return function(n){return!e(n)||!!t&&t(n)}})},function(t,n,r){var e=r(6);r(49)("isSealed",function(t){return function(n){return!e(n)||!!t&&t(n)}})},function(t,n,r){var e=r(1);e(e.S,"Object",{is:r(180)})},function(t,n,r){var e=r(17),i=r(72);r(49)("keys",function(){return function(t){return i(e(t))}})},function(t,n,r){var e=r(6),i=r(65).onFreeze;r(49)("preventExtensions",function(t){return function(n){return t&&e(n)?t(i(n)):n}})},function(t,n,r){var e=r(6),i=r(65).onFreeze;r(49)("seal",function(t){return function(n){return t&&e(n)?t(i(n)):n}})},function(t,n,r){var e=r(1);e(e.S,"Object",{setPrototypeOf:r(144).set})},function(t,n,r){"use strict";var e=r(114),i={};i[r(7)("toStringTag")]="z",i+""!="[object z]"&&r(28)(Object.prototype,"toString",function(){return"[object "+e(this)+"]"},!0)},function(t,n,r){var e=r(1),i=r(178);e(e.G+e.F*(parseFloat!=i),{parseFloat:i})},function(t,n,r){var e=r(1),i=r(179);e(e.G+e.F*(parseInt!=i),{parseInt:i})},function(t,n,r){"use strict";var e,i,o,u=r(69),c=r(3),f=r(53),a=r(114),s=r(1),l=r(6),h=r(26),v=r(68),p=r(79),d=r(146),y=r(151).set,g=r(143)(),b="Promise",m=c.TypeError,x=c.process,w=c[b],x=c.process,S="process"==a(x),_=function(){},O=!!function(){try{var t=w.resolve(1),n=(t.constructor={})[r(7)("species")]=function(t){t(_,_)};return(S||"function"==typeof PromiseRejectionEvent)&&t.then(_)instanceof n}catch(t){}}(),E=function(t,n){return t===n||t===w&&n===o},P=function(t){var n;return!(!l(t)||"function"!=typeof(n=t.then))&&n},j=function(t){return E(w,t)?new F(t):new i(t)},F=i=function(t){var n,r;this.promise=new t(function(t,e){if(void 0!==n||void 0!==r)throw m("Bad Promise constructor");n=t,r=e}),this.resolve=h(n),this.reject=h(r)},M=function(t){try{t()}catch(t){return{error:t}}},A=function(t,n){if(!t._n){t._n=!0;var r=t._c;g(function(){for(var e=t._v,i=1==t._s,o=0;r.length>o;)!function(n){var r,o,u=i?n.ok:n.fail,c=n.resolve,f=n.reject,a=n.domain;try{u?(i||(2==t._h&&I(t),t._h=1),!0===u?r=e:(a&&a.enter(),r=u(e),a&&a.exit()),r===n.promise?f(m("Promise-chain cycle")):(o=P(r))?o.call(r,c,f):c(r)):f(e)}catch(t){f(t)}}(r[o++]);t._c=[],t._n=!1,n&&!t._h&&N(t)})}},N=function(t){y.call(c,function(){var n,r,e,i=t._v;if(T(t)&&(n=M(function(){S?x.emit("unhandledRejection",i,t):(r=c.onunhandledrejection)?r({promise:t,reason:i}):(e=c.console)&&e.error&&e.error("Unhandled promise rejection",i)}),t._h=S||T(t)?2:1),t._a=void 0,n)throw n.error})},T=function(t){if(1==t._h)return!1;for(var n,r=t._a||t._c,e=0;r.length>e;)if(n=r[e++],n.fail||!T(n.promise))return!1;return!0},I=function(t){y.call(c,function(){var n;S?x.emit("rejectionHandled",t):(n=c.onrejectionhandled)&&n({promise:t,reason:t._v})})},k=function(t){var n=this;n._d||(n._d=!0,n=n._w||n,n._v=t,n._s=2,n._a||(n._a=n._c.slice()),A(n,!0))},L=function(t){var n,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===t)throw m("Promise can't be resolved itself");(n=P(t))?g(function(){var e={_w:r,_d:!1};try{n.call(t,f(L,e,1),f(k,e,1))}catch(t){k.call(e,t)}}):(r._v=t,r._s=1,A(r,!1))}catch(t){k.call({_w:r,_d:!1},t)}}};O||(w=function(t){v(this,w,b,"_h"),h(t),e.call(this);try{t(f(L,this,1),f(k,this,1))}catch(t){k.call(this,t)}},e=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},e.prototype=r(73)(w.prototype,{then:function(t,n){var r=j(d(this,w));return r.ok="function"!=typeof t||t,r.fail="function"==typeof n&&n,r.domain=S?x.domain:void 0,this._c.push(r),this._a&&this._a.push(r),this._s&&A(this,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),F=function(){var t=new e;this.promise=t,this.resolve=f(L,t,1),this.reject=f(k,t,1)}),s(s.G+s.W+s.F*!O,{Promise:w}),r(81)(w,b),r(74)(b),o=r(52)[b],s(s.S+s.F*!O,b,{reject:function(t){var n=j(this);return(0,n.reject)(t),n.promise}}),s(s.S+s.F*(u||!O),b,{resolve:function(t){if(t instanceof w&&E(t.constructor,this))return t;var n=j(this);return(0,n.resolve)(t),n.promise}}),s(s.S+s.F*!(O&&r(123)(function(t){w.all(t).catch(_)})),b,{all:function(t){var n=this,r=j(n),e=r.resolve,i=r.reject,o=M(function(){var r=[],o=0,u=1;p(t,!1,function(t){var c=o++,f=!1;r.push(void 0),u++,n.resolve(t).then(function(t){f||(f=!0,r[c]=t,--u||e(r))},i)}),--u||e(r)});return o&&i(o.error),r.promise},race:function(t){var n=this,r=j(n),e=r.reject,i=M(function(){p(t,!1,function(t){n.resolve(t).then(r.resolve,e)})});return i&&e(i.error),r.promise}})},function(t,n,r){var e=r(1),i=r(26),o=r(2),u=(r(3).Reflect||{}).apply,c=Function.apply;e(e.S+e.F*!r(4)(function(){u(function(){})}),"Reflect",{apply:function(t,n,r){var e=i(t),f=o(r);return u?u(e,n,f):c.call(e,n,f)}})},function(t,n,r){var e=r(1),i=r(70),o=r(26),u=r(2),c=r(6),f=r(4),a=r(163),s=(r(3).Reflect||{}).construct,l=f(function(){function t(){}return!(s(function(){},[],t)instanceof t)}),h=!f(function(){s(function(){})});e(e.S+e.F*(l||h),"Reflect",{construct:function(t,n){o(t),u(n);var r=arguments.length<3?t:o(arguments[2]);if(h&&!l)return s(t,n,r);if(t==r){switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3])}var e=[null];return e.push.apply(e,n),new(a.apply(t,e))}var f=r.prototype,v=i(c(f)?f:Object.prototype),p=Function.apply.call(t,v,n);return c(p)?p:v}})},function(t,n,r){var e=r(11),i=r(1),o=r(2),u=r(50);i(i.S+i.F*r(4)(function(){Reflect.defineProperty(e.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,n,r){o(t),n=u(n,!0),o(r);try{return e.f(t,n,r),!0}catch(t){return!1}}})},function(t,n,r){var e=r(1),i=r(31).f,o=r(2);e(e.S,"Reflect",{deleteProperty:function(t,n){var r=i(o(t),n);return!(r&&!r.configurable)&&delete t[n]}})},function(t,n,r){"use strict";var e=r(1),i=r(2),o=function(t){this._t=i(t),this._i=0;var n,r=this._k=[];for(n in t)r.push(n)};r(139)(o,"Object",function(){var t,n=this,r=n._k;do{if(n._i>=r.length)return{value:void 0,done:!0}}while(!((t=r[n._i++])in n._t));return{value:t,done:!1}}),e(e.S,"Reflect",{enumerate:function(t){return new o(t)}})},function(t,n,r){var e=r(31),i=r(1),o=r(2);i(i.S,"Reflect",{getOwnPropertyDescriptor:function(t,n){return e.f(o(t),n)}})},function(t,n,r){var e=r(1),i=r(32),o=r(2);e(e.S,"Reflect",{getPrototypeOf:function(t){return i(o(t))}})},function(t,n,r){function e(t,n){var r,c,s=arguments.length<3?t:arguments[2];return a(t)===s?t[n]:(r=i.f(t,n))?u(r,"value")?r.value:void 0!==r.get?r.get.call(s):void 0:f(c=o(t))?e(c,n,s):void 0}var i=r(31),o=r(32),u=r(24),c=r(1),f=r(6),a=r(2);c(c.S,"Reflect",{get:e})},function(t,n,r){var e=r(1);e(e.S,"Reflect",{has:function(t,n){return n in t}})},function(t,n,r){var e=r(1),i=r(2),o=Object.isExtensible;e(e.S,"Reflect",{isExtensible:function(t){return i(t),!o||o(t)}})},function(t,n,r){var e=r(1);e(e.S,"Reflect",{ownKeys:r(177)})},function(t,n,r){var e=r(1),i=r(2),o=Object.preventExtensions;e(e.S,"Reflect",{preventExtensions:function(t){i(t);try{return o&&o(t),!0}catch(t){return!1}}})},function(t,n,r){var e=r(1),i=r(144);i&&e(e.S,"Reflect",{setPrototypeOf:function(t,n){i.check(t,n);try{return i.set(t,n),!0}catch(t){return!1}}})},function(t,n,r){function e(t,n,r){var f,h,v=arguments.length<4?t:arguments[3],p=o.f(s(t),n);if(!p){if(l(h=u(t)))return e(h,n,r,v);p=a(0)}return c(p,"value")?!(!1===p.writable||!l(v)||(f=o.f(v,n)||a(0),f.value=r,i.f(v,n,f),0)):void 0!==p.set&&(p.set.call(v,r),!0)}var i=r(11),o=r(31),u=r(32),c=r(24),f=r(1),a=r(66),s=r(2),l=r(6);f(f.S,"Reflect",{set:e})},function(t,n,r){var e=r(3),i=r(136),o=r(11).f,u=r(71).f,c=r(122),f=r(120),a=e.RegExp,s=a,l=a.prototype,h=/a/g,v=/a/g,p=new a(h)!==h;if(r(10)&&(!p||r(4)(function(){return v[r(7)("match")]=!1,a(h)!=h||a(v)==v||"/a/i"!=a(h,"i")}))){a=function(t,n){var r=this instanceof a,e=c(t),o=void 0===n;return!r&&e&&t.constructor===a&&o?t:i(p?new s(e&&!o?t.source:t,n):s((e=t instanceof a)?t.source:t,e&&o?f.call(t):n),r?this:l,a)};for(var d=u(s),y=0;d.length>y;)!function(t){t in a||o(a,t,{configurable:!0,get:function(){return s[t]},set:function(n){s[t]=n}})}(d[y++]);l.constructor=a,a.prototype=l,r(28)(e,"RegExp",a)}r(74)("RegExp")},function(t,n,r){r(119)("match",1,function(t,n,r){return[function(r){"use strict";var e=t(this),i=void 0==r?void 0:r[n];return void 0!==i?i.call(r,e):new RegExp(r)[n](String(e))},r]})},function(t,n,r){r(119)("replace",2,function(t,n,r){return[function(e,i){"use strict";var o=t(this),u=void 0==e?void 0:e[n];return void 0!==u?u.call(e,o,i):r.call(String(o),e,i)},r]})},function(t,n,r){r(119)("search",1,function(t,n,r){return[function(r){"use strict";var e=t(this),i=void 0==r?void 0:r[n];return void 0!==i?i.call(r,e):new RegExp(r)[n](String(e))},r]})},function(t,n,r){r(119)("split",2,function(t,n,e){"use strict";var i=r(122),o=e,u=[].push,c="split",f="length",a="lastIndex";if("c"=="abbc"[c](/(b)*/)[1]||4!="test"[c](/(?:)/,-1)[f]||2!="ab"[c](/(?:ab)*/)[f]||4!="."[c](/(.?)(.?)/)[f]||"."[c](/()()/)[f]>1||""[c](/.?/)[f]){var s=void 0===/()??/.exec("")[1];e=function(t,n){var r=String(this);if(void 0===t&&0===n)return[];if(!i(t))return o.call(r,t,n);var e,c,l,h,v,p=[],d=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),y=0,g=void 0===n?4294967295:n>>>0,b=new RegExp(t.source,d+"g");for(s||(e=new RegExp("^"+b.source+"$(?!\\s)",d));(c=b.exec(r))&&!((l=c.index+c[0][f])>y&&(p.push(r.slice(y,c.index)),!s&&c[f]>1&&c[0].replace(e,function(){for(v=1;v<arguments[f]-2;v++)void 0===arguments[v]&&(c[v]=void 0)}),c[f]>1&&c.index<r[f]&&u.apply(p,c.slice(1)),h=c[0][f],y=l,p[f]>=g));)b[a]===c.index&&b[a]++;return y===r[f]?!h&&b.test("")||p.push(""):p.push(r.slice(y)),p[f]>g?p.slice(0,g):p}}else"0"[c](void 0,0)[f]&&(e=function(t,n){return void 0===t&&0===n?[]:o.call(this,t,n)});return[function(r,i){var o=t(this),u=void 0==r?void 0:r[n];return void 0!==u?u.call(r,o,i):e.call(String(o),r,i)},e]})},function(t,n,r){"use strict";r(184);var e=r(2),i=r(120),o=r(10),u="toString",c=/./[u],f=function(t){r(28)(RegExp.prototype,u,t,!0)};r(4)(function(){return"/a/b"!=c.call({source:"a",flags:"b"})})?f(function(){var t=e(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):void 0)}):c.name!=u&&f(function(){return c.call(this)})},function(t,n,r){"use strict";r(29)("anchor",function(t){return function(n){return t(this,"a","name",n)}})},function(t,n,r){"use strict";r(29)("big",function(t){return function(){return t(this,"big","","")}})},function(t,n,r){"use strict";r(29)("blink",function(t){return function(){return t(this,"blink","","")}})},function(t,n,r){"use strict";r(29)("bold",function(t){return function(){return t(this,"b","","")}})},function(t,n,r){"use strict";var e=r(1),i=r(147)(!1);e(e.P,"String",{codePointAt:function(t){return i(this,t)}})},function(t,n,r){"use strict";var e=r(1),i=r(16),o=r(148),u="endsWith",c=""[u];e(e.P+e.F*r(134)(u),"String",{endsWith:function(t){var n=o(this,t,u),r=arguments.length>1?arguments[1]:void 0,e=i(n.length),f=void 0===r?e:Math.min(i(r),e),a=String(t);return c?c.call(n,a,f):n.slice(f-a.length,f)===a}})},function(t,n,r){"use strict";r(29)("fixed",function(t){return function(){return t(this,"tt","","")}})},function(t,n,r){"use strict";r(29)("fontcolor",function(t){return function(n){return t(this,"font","color",n)}})},function(t,n,r){"use strict";r(29)("fontsize",function(t){return function(n){return t(this,"font","size",n)}})},function(t,n,r){var e=r(1),i=r(75),o=String.fromCharCode,u=String.fromCodePoint;e(e.S+e.F*(!!u&&1!=u.length),"String",{fromCodePoint:function(t){for(var n,r=[],e=arguments.length,u=0;e>u;){if(n=+arguments[u++],i(n,1114111)!==n)throw RangeError(n+" is not a valid code point");r.push(n<65536?o(n):o(55296+((n-=65536)>>10),n%1024+56320))}return r.join("")}})},function(t,n,r){"use strict";var e=r(1),i=r(148),o="includes";e(e.P+e.F*r(134)(o),"String",{includes:function(t){return!!~i(this,t,o).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},function(t,n,r){"use strict";r(29)("italics",function(t){return function(){return t(this,"i","","")}})},function(t,n,r){"use strict";var e=r(147)(!0);r(140)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,n=this._t,r=this._i;return r>=n.length?{value:void 0,done:!0}:(t=e(n,r),this._i+=t.length,{value:t,done:!1})})},function(t,n,r){"use strict";r(29)("link",function(t){return function(n){return t(this,"a","href",n)}})},function(t,n,r){var e=r(1),i=r(30),o=r(16);e(e.S,"String",{raw:function(t){for(var n=i(t.raw),r=o(n.length),e=arguments.length,u=[],c=0;r>c;)u.push(String(n[c++])),c<e&&u.push(String(arguments[c]));return u.join("")}})},function(t,n,r){var e=r(1);e(e.P,"String",{repeat:r(149)})},function(t,n,r){"use strict";r(29)("small",function(t){return function(){return t(this,"small","","")}})},function(t,n,r){"use strict";var e=r(1),i=r(16),o=r(148),u="startsWith",c=""[u];e(e.P+e.F*r(134)(u),"String",{startsWith:function(t){var n=o(this,t,u),r=i(Math.min(arguments.length>1?arguments[1]:void 0,n.length)),e=String(t);return c?c.call(n,e,r):n.slice(r,r+e.length)===e}})},function(t,n,r){"use strict";r(29)("strike",function(t){return function(){return t(this,"strike","","")}})},function(t,n,r){"use strict";r(29)("sub",function(t){return function(){return t(this,"sub","","")}})},function(t,n,r){"use strict";r(29)("sup",function(t){return function(){return t(this,"sup","","")}})},function(t,n,r){"use strict";r(82)("trim",function(t){return function(){return t(this,3)}})},function(t,n,r){"use strict";var e=r(3),i=r(24),o=r(10),u=r(1),c=r(28),f=r(65).KEY,a=r(4),s=r(126),l=r(81),h=r(76),v=r(7),p=r(182),d=r(153),y=r(206),g=r(205),b=r(138),m=r(2),x=r(30),w=r(50),S=r(66),_=r(70),O=r(174),E=r(31),P=r(11),j=r(72),F=E.f,M=P.f,A=O.f,N=e.Symbol,T=e.JSON,I=T&&T.stringify,k="prototype",L=v("_hidden"),R=v("toPrimitive"),C={}.propertyIsEnumerable,D=s("symbol-registry"),U=s("symbols"),W=s("op-symbols"),G=Object[k],B="function"==typeof N,V=e.QObject,z=!V||!V[k]||!V[k].findChild,q=o&&a(function(){return 7!=_(M({},"a",{get:function(){return M(this,"a",{value:7}).a}})).a})?function(t,n,r){var e=F(G,n);e&&delete G[n],M(t,n,r),e&&t!==G&&M(G,n,e)}:M,K=function(t){var n=U[t]=_(N[k]);return n._k=t,n},J=B&&"symbol"==typeof N.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof N},Y=function(t,n,r){return t===G&&Y(W,n,r),m(t),n=w(n,!0),m(r),i(U,n)?(r.enumerable?(i(t,L)&&t[L][n]&&(t[L][n]=!1),r=_(r,{enumerable:S(0,!1)})):(i(t,L)||M(t,L,S(1,{})),t[L][n]=!0),q(t,n,r)):M(t,n,r)},H=function(t,n){m(t);for(var r,e=g(n=x(n)),i=0,o=e.length;o>i;)Y(t,r=e[i++],n[r]);return t},$=function(t,n){return void 0===n?_(t):H(_(t),n)},X=function(t){var n=C.call(this,t=w(t,!0));return!(this===G&&i(U,t)&&!i(W,t))&&(!(n||!i(this,t)||!i(U,t)||i(this,L)&&this[L][t])||n)},Q=function(t,n){if(t=x(t),n=w(n,!0),t!==G||!i(U,n)||i(W,n)){var r=F(t,n);return!r||!i(U,n)||i(t,L)&&t[L][n]||(r.enumerable=!0),r}},Z=function(t){for(var n,r=A(x(t)),e=[],o=0;r.length>o;)i(U,n=r[o++])||n==L||n==f||e.push(n);return e},tt=function(t){for(var n,r=t===G,e=A(r?W:x(t)),o=[],u=0;e.length>u;)!i(U,n=e[u++])||r&&!i(G,n)||o.push(U[n]);return o};B||(N=function(){if(this instanceof N)throw TypeError("Symbol is not a constructor!");var t=h(arguments.length>0?arguments[0]:void 0),n=function(r){this===G&&n.call(W,r),i(this,L)&&i(this[L],t)&&(this[L][t]=!1),q(this,t,S(1,r))};return o&&z&&q(G,t,{configurable:!0,set:n}),K(t)},c(N[k],"toString",function(){return this._k}),E.f=Q,P.f=Y,r(71).f=O.f=Z,r(116).f=X,r(125).f=tt,o&&!r(69)&&c(G,"propertyIsEnumerable",X,!0),p.f=function(t){return K(v(t))}),u(u.G+u.W+u.F*!B,{Symbol:N});for(var nt="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),rt=0;nt.length>rt;)v(nt[rt++]);for(var nt=j(v.store),rt=0;nt.length>rt;)d(nt[rt++]);u(u.S+u.F*!B,"Symbol",{for:function(t){return i(D,t+="")?D[t]:D[t]=N(t)},keyFor:function(t){if(J(t))return y(D,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){z=!0},useSimple:function(){z=!1}}),u(u.S+u.F*!B,"Object",{create:$,defineProperty:Y,defineProperties:H,getOwnPropertyDescriptor:Q,getOwnPropertyNames:Z,getOwnPropertySymbols:tt}),T&&u(u.S+u.F*(!B||a(function(){var t=N();return"[null]"!=I([t])||"{}"!=I({a:t})||"{}"!=I(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!J(t)){for(var n,r,e=[t],i=1;arguments.length>i;)e.push(arguments[i++]);return n=e[1],"function"==typeof n&&(r=n),!r&&b(n)||(n=function(t,n){if(r&&(n=r.call(this,t,n)),!J(n))return n}),e[1]=n,I.apply(T,e)}}}),N[k][R]||r(27)(N[k],R,N[k].valueOf),l(N,"Symbol"),l(Math,"Math",!0),l(e.JSON,"JSON",!0)},function(t,n,r){"use strict";var e=r(1),i=r(127),o=r(152),u=r(2),c=r(75),f=r(16),a=r(6),s=r(3).ArrayBuffer,l=r(146),h=o.ArrayBuffer,v=o.DataView,p=i.ABV&&s.isView,d=h.prototype.slice,y=i.VIEW,g="ArrayBuffer";e(e.G+e.W+e.F*(s!==h),{ArrayBuffer:h}),e(e.S+e.F*!i.CONSTR,g,{isView:function(t){return p&&p(t)||a(t)&&y in t}}),e(e.P+e.U+e.F*r(4)(function(){return!new h(2).slice(1,void 0).byteLength}),g,{slice:function(t,n){if(void 0!==d&&void 0===n)return d.call(u(this),t);for(var r=u(this).byteLength,e=c(t,r),i=c(void 0===n?r:n,r),o=new(l(this,h))(f(i-e)),a=new v(this),s=new v(o),p=0;e<i;)s.setUint8(p++,a.getUint8(e++));return o}}),r(74)(g)},function(t,n,r){var e=r(1);e(e.G+e.W+e.F*!r(127).ABV,{DataView:r(152).DataView})},function(t,n,r){r(55)("Float32",4,function(t){return function(n,r,e){return t(this,n,r,e)}})},function(t,n,r){r(55)("Float64",8,function(t){return function(n,r,e){return t(this,n,r,e)}})},function(t,n,r){r(55)("Int16",2,function(t){return function(n,r,e){return t(this,n,r,e)}})},function(t,n,r){r(55)("Int32",4,function(t){return function(n,r,e){return t(this,n,r,e)}})},function(t,n,r){r(55)("Int8",1,function(t){return function(n,r,e){return t(this,n,r,e)}})},function(t,n,r){r(55)("Uint16",2,function(t){return function(n,r,e){return t(this,n,r,e)}})},function(t,n,r){r(55)("Uint32",4,function(t){return function(n,r,e){return t(this,n,r,e)}})},function(t,n,r){r(55)("Uint8",1,function(t){return function(n,r,e){return t(this,n,r,e)}})},function(t,n,r){r(55)("Uint8",1,function(t){return function(n,r,e){return t(this,n,r,e)}},!0)},function(t,n,r){"use strict";var e=r(166);r(118)("WeakSet",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return e.def(this,t,!0)}},e,!1,!0)},function(t,n,r){"use strict";var e=r(1),i=r(117)(!0);e(e.P,"Array",{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(78)("includes")},function(t,n,r){var e=r(1),i=r(143)(),o=r(3).process,u="process"==r(45)(o);e(e.G,{asap:function(t){var n=u&&o.domain;i(n?n.bind(t):t)}})},function(t,n,r){var e=r(1),i=r(45);e(e.S,"Error",{isError:function(t){return"Error"===i(t)}})},function(t,n,r){var e=r(1);e(e.P+e.R,"Map",{toJSON:r(165)("Map")})},function(t,n,r){var e=r(1);e(e.S,"Math",{iaddh:function(t,n,r,e){var i=t>>>0,o=n>>>0,u=r>>>0;return o+(e>>>0)+((i&u|(i|u)&~(i+u>>>0))>>>31)|0}})},function(t,n,r){var e=r(1);e(e.S,"Math",{imulh:function(t,n){var r=65535,e=+t,i=+n,o=e&r,u=i&r,c=e>>16,f=i>>16,a=(c*u>>>0)+(o*u>>>16);return c*f+(a>>16)+((o*f>>>0)+(a&r)>>16)}})},function(t,n,r){var e=r(1);e(e.S,"Math",{isubh:function(t,n,r,e){var i=t>>>0,o=n>>>0,u=r>>>0;return o-(e>>>0)-((~i&u|~(i^u)&i-u>>>0)>>>31)|0}})},function(t,n,r){var e=r(1);e(e.S,"Math",{umulh:function(t,n){var r=65535,e=+t,i=+n,o=e&r,u=i&r,c=e>>>16,f=i>>>16,a=(c*u>>>0)+(o*u>>>16);return c*f+(a>>>16)+((o*f>>>0)+(a&r)>>>16)}})},function(t,n,r){"use strict";var e=r(1),i=r(17),o=r(26),u=r(11);r(10)&&e(e.P+r(124),"Object",{__defineGetter__:function(t,n){u.f(i(this),t,{get:o(n),enumerable:!0,configurable:!0})}})},function(t,n,r){"use strict";var e=r(1),i=r(17),o=r(26),u=r(11);r(10)&&e(e.P+r(124),"Object",{__defineSetter__:function(t,n){u.f(i(this),t,{set:o(n),enumerable:!0,configurable:!0})}})},function(t,n,r){var e=r(1),i=r(176)(!0);e(e.S,"Object",{entries:function(t){return i(t)}})},function(t,n,r){var e=r(1),i=r(177),o=r(30),u=r(31),c=r(131);e(e.S,"Object",{getOwnPropertyDescriptors:function(t){for(var n,r=o(t),e=u.f,f=i(r),a={},s=0;f.length>s;)c(a,n=f[s++],e(r,n));return a}})},function(t,n,r){"use strict";var e=r(1),i=r(17),o=r(50),u=r(32),c=r(31).f;r(10)&&e(e.P+r(124),"Object",{__lookupGetter__:function(t){var n,r=i(this),e=o(t,!0);do{if(n=c(r,e))return n.get}while(r=u(r))}})},function(t,n,r){"use strict";var e=r(1),i=r(17),o=r(50),u=r(32),c=r(31).f;r(10)&&e(e.P+r(124),"Object",{__lookupSetter__:function(t){var n,r=i(this),e=o(t,!0);do{if(n=c(r,e))return n.set}while(r=u(r))}})},function(t,n,r){var e=r(1),i=r(176)(!1);e(e.S,"Object",{values:function(t){return i(t)}})},function(t,n,r){"use strict";var e=r(1),i=r(3),o=r(52),u=r(143)(),c=r(7)("observable"),f=r(26),a=r(2),s=r(68),l=r(73),h=r(27),v=r(79),p=v.RETURN,d=function(t){return null==t?void 0:f(t)},y=function(t){var n=t._c;n&&(t._c=void 0,n())},g=function(t){return void 0===t._o},b=function(t){g(t)||(t._o=void 0,y(t))},m=function(t,n){a(t),this._c=void 0,this._o=t,t=new x(this);try{var r=n(t),e=r;null!=r&&("function"==typeof r.unsubscribe?r=function(){e.unsubscribe()}:f(r),this._c=r)}catch(n){return void t.error(n)}g(this)&&y(this)};m.prototype=l({},{unsubscribe:function(){b(this)}});var x=function(t){this._s=t};x.prototype=l({},{next:function(t){var n=this._s;if(!g(n)){var r=n._o;try{var e=d(r.next);if(e)return e.call(r,t)}catch(t){try{b(n)}finally{throw t}}}},error:function(t){var n=this._s;if(g(n))throw t;var r=n._o;n._o=void 0;try{var e=d(r.error);if(!e)throw t;t=e.call(r,t)}catch(t){try{y(n)}finally{throw t}}return y(n),t},complete:function(t){var n=this._s;if(!g(n)){var r=n._o;n._o=void 0;try{var e=d(r.complete);t=e?e.call(r,t):void 0}catch(t){try{y(n)}finally{throw t}}return y(n),t}}});var w=function(t){s(this,w,"Observable","_f")._f=f(t)};l(w.prototype,{subscribe:function(t){return new m(t,this._f)},forEach:function(t){var n=this;return new(o.Promise||i.Promise)(function(r,e){f(t);var i=n.subscribe({next:function(n){try{return t(n)}catch(t){e(t),i.unsubscribe()}},error:e,complete:r})})}}),l(w,{from:function(t){var n="function"==typeof this?this:w,r=d(a(t)[c]);if(r){var e=a(r.call(t));return e.constructor===n?e:new n(function(t){return e.subscribe(t)})}return new n(function(n){var r=!1;return u(function(){if(!r){try{if(v(t,!1,function(t){if(n.next(t),r)return p})===p)return}catch(t){if(r)throw t;return void n.error(t)}n.complete()}}),function(){r=!0}})},of:function(){for(var t=0,n=arguments.length,r=Array(n);t<n;)r[t]=arguments[t++];return new("function"==typeof this?this:w)(function(t){var n=!1;return u(function(){if(!n){for(var e=0;e<r.length;++e)if(t.next(r[e]),n)return;t.complete()}}),function(){n=!0}})}}),h(w.prototype,c,function(){return this}),e(e.G,{Observable:w}),r(74)("Observable")},function(t,n,r){var e=r(54),i=r(2),o=e.key,u=e.set;e.exp({defineMetadata:function(t,n,r,e){u(t,n,i(r),o(e))}})},function(t,n,r){var e=r(54),i=r(2),o=e.key,u=e.map,c=e.store;e.exp({deleteMetadata:function(t,n){var r=arguments.length<3?void 0:o(arguments[2]),e=u(i(n),r,!1);if(void 0===e||!e.delete(t))return!1;if(e.size)return!0;var f=c.get(n);return f.delete(r),!!f.size||c.delete(n)}})},function(t,n,r){var e=r(185),i=r(161),o=r(54),u=r(2),c=r(32),f=o.keys,a=o.key,s=function(t,n){var r=f(t,n),o=c(t);if(null===o)return r;var u=s(o,n);return u.length?r.length?i(new e(r.concat(u))):u:r};o.exp({getMetadataKeys:function(t){return s(u(t),arguments.length<2?void 0:a(arguments[1]))}})},function(t,n,r){var e=r(54),i=r(2),o=r(32),u=e.has,c=e.get,f=e.key,a=function(t,n,r){if(u(t,n,r))return c(t,n,r);var e=o(n);return null!==e?a(t,e,r):void 0};e.exp({getMetadata:function(t,n){return a(t,i(n),arguments.length<3?void 0:f(arguments[2]))}})},function(t,n,r){var e=r(54),i=r(2),o=e.keys,u=e.key;e.exp({getOwnMetadataKeys:function(t){
return o(i(t),arguments.length<2?void 0:u(arguments[1]))}})},function(t,n,r){var e=r(54),i=r(2),o=e.get,u=e.key;e.exp({getOwnMetadata:function(t,n){return o(t,i(n),arguments.length<3?void 0:u(arguments[2]))}})},function(t,n,r){var e=r(54),i=r(2),o=r(32),u=e.has,c=e.key,f=function(t,n,r){if(u(t,n,r))return!0;var e=o(n);return null!==e&&f(t,e,r)};e.exp({hasMetadata:function(t,n){return f(t,i(n),arguments.length<3?void 0:c(arguments[2]))}})},function(t,n,r){var e=r(54),i=r(2),o=e.has,u=e.key;e.exp({hasOwnMetadata:function(t,n){return o(t,i(n),arguments.length<3?void 0:u(arguments[2]))}})},function(t,n,r){var e=r(54),i=r(2),o=r(26),u=e.key,c=e.set;e.exp({metadata:function(t,n){return function(r,e){c(t,n,(void 0!==e?i:o)(r),u(e))}}})},function(t,n,r){var e=r(1);e(e.P+e.R,"Set",{toJSON:r(165)("Set")})},function(t,n,r){"use strict";var e=r(1),i=r(147)(!0);e(e.P,"String",{at:function(t){return i(this,t)}})},function(t,n,r){"use strict";var e=r(1),i=r(46),o=r(16),u=r(122),c=r(120),f=RegExp.prototype,a=function(t,n){this._r=t,this._s=n};r(139)(a,"RegExp String",function(){var t=this._r.exec(this._s);return{value:t,done:null===t}}),e(e.P,"String",{matchAll:function(t){if(i(this),!u(t))throw TypeError(t+" is not a regexp!");var n=String(this),r="flags"in f?String(t.flags):c.call(t),e=new RegExp(t.source,~r.indexOf("g")?r:"g"+r);return e.lastIndex=o(t.lastIndex),new a(e,n)}})},function(t,n,r){"use strict";var e=r(1),i=r(181);e(e.P,"String",{padEnd:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},function(t,n,r){"use strict";var e=r(1),i=r(181);e(e.P,"String",{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},function(t,n,r){"use strict";r(82)("trimLeft",function(t){return function(){return t(this,1)}},"trimStart")},function(t,n,r){"use strict";r(82)("trimRight",function(t){return function(){return t(this,2)}},"trimEnd")},function(t,n,r){r(153)("asyncIterator")},function(t,n,r){r(153)("observable")},function(t,n,r){var e=r(1);e(e.S,"System",{global:r(3)})},function(t,n,r){for(var e=r(155),i=r(28),o=r(3),u=r(27),c=r(80),f=r(7),a=f("iterator"),s=f("toStringTag"),l=c.Array,h=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],v=0;v<5;v++){var p,d=h[v],y=o[d],g=y&&y.prototype;if(g){g[a]||u(g,a,l),g[s]||u(g,s,d),c[d]=l;for(p in e)g[p]||i(g,p,e[p],!0)}}},function(t,n,r){var e=r(1),i=r(151);e(e.G+e.B,{setImmediate:i.set,clearImmediate:i.clear})},function(t,n,r){var e=r(3),i=r(1),o=r(121),u=r(207),c=e.navigator,f=!!c&&/MSIE .\./.test(c.userAgent),a=function(t){return f?function(n,r){return t(o(u,[].slice.call(arguments,2),"function"==typeof n?n:Function(n)),r)}:t};i(i.G+i.B+i.F*f,{setTimeout:a(e.setTimeout),setInterval:a(e.setInterval)})},function(t,n,r){r(330),r(269),r(271),r(270),r(273),r(275),r(280),r(274),r(272),r(282),r(281),r(277),r(278),r(276),r(268),r(279),r(283),r(284),r(236),r(238),r(237),r(286),r(285),r(256),r(266),r(267),r(257),r(258),r(259),r(260),r(261),r(262),r(263),r(264),r(265),r(239),r(240),r(241),r(242),r(243),r(244),r(245),r(246),r(247),r(248),r(249),r(250),r(251),r(252),r(253),r(254),r(255),r(317),r(322),r(329),r(320),r(312),r(313),r(318),r(323),r(325),r(308),r(309),r(310),r(311),r(314),r(315),r(316),r(319),r(321),r(324),r(326),r(327),r(328),r(231),r(233),r(232),r(235),r(234),r(220),r(218),r(224),r(221),r(227),r(229),r(217),r(223),r(214),r(228),r(212),r(226),r(225),r(219),r(222),r(211),r(213),r(216),r(215),r(230),r(155),r(302),r(307),r(184),r(303),r(304),r(305),r(306),r(287),r(183),r(185),r(186),r(342),r(331),r(332),r(337),r(340),r(341),r(335),r(338),r(336),r(339),r(333),r(334),r(288),r(289),r(290),r(291),r(292),r(295),r(293),r(294),r(296),r(297),r(298),r(299),r(301),r(300),r(343),r(369),r(372),r(371),r(373),r(374),r(370),r(375),r(376),r(354),r(357),r(353),r(351),r(352),r(355),r(356),r(346),r(368),r(377),r(345),r(347),r(349),r(348),r(350),r(359),r(360),r(362),r(361),r(364),r(363),r(365),r(366),r(367),r(344),r(358),r(380),r(379),r(378),t.exports=r(52)},function(t,n){function r(t,n){if("string"==typeof n)return t.insertAdjacentHTML("afterend",n);var r=t.nextSibling;return r?t.parentNode.insertBefore(n,r):t.parentNode.appendChild(n)}t.exports=r},,,,,,,,,function(t,n,r){(function(n,r){!function(n){"use strict";function e(t,n,r,e){var i=n&&n.prototype instanceof o?n:o,u=Object.create(i.prototype),c=new p(e||[]);return u._invoke=s(t,r,c),u}function i(t,n,r){try{return{type:"normal",arg:t.call(n,r)}}catch(t){return{type:"throw",arg:t}}}function o(){}function u(){}function c(){}function f(t){["next","throw","return"].forEach(function(n){t[n]=function(t){return this._invoke(n,t)}})}function a(t){function n(r,e,o,u){var c=i(t[r],t,e);if("throw"!==c.type){var f=c.arg,a=f.value;return a&&"object"==typeof a&&m.call(a,"__await")?Promise.resolve(a.__await).then(function(t){n("next",t,o,u)},function(t){n("throw",t,o,u)}):Promise.resolve(a).then(function(t){f.value=t,o(f)},u)}u(c.arg)}function e(t,r){function e(){return new Promise(function(e,i){n(t,r,e,i)})}return o=o?o.then(e,e):e()}"object"==typeof r&&r.domain&&(n=r.domain.bind(n));var o;this._invoke=e}function s(t,n,r){var e=P;return function(o,u){if(e===F)throw new Error("Generator is already running");if(e===M){if("throw"===o)throw u;return y()}for(r.method=o,r.arg=u;;){var c=r.delegate;if(c){var f=l(c,r);if(f){if(f===A)continue;return f}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(e===P)throw e=M,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);e=F;var a=i(t,n,r);if("normal"===a.type){if(e=r.done?M:j,a.arg===A)continue;return{value:a.arg,done:r.done}}"throw"===a.type&&(e=M,r.method="throw",r.arg=a.arg)}}}function l(t,n){var r=t.iterator[n.method];if(r===g){if(n.delegate=null,"throw"===n.method){if(t.iterator.return&&(n.method="return",n.arg=g,l(t,n),"throw"===n.method))return A;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return A}var e=i(r,t.iterator,n.arg);if("throw"===e.type)return n.method="throw",n.arg=e.arg,n.delegate=null,A;var o=e.arg;return o?o.done?(n[t.resultName]=o.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=g),n.delegate=null,A):o:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,A)}function h(t){var n={tryLoc:t[0]};1 in t&&(n.catchLoc=t[1]),2 in t&&(n.finallyLoc=t[2],n.afterLoc=t[3]),this.tryEntries.push(n)}function v(t){var n=t.completion||{};n.type="normal",delete n.arg,t.completion=n}function p(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(h,this),this.reset(!0)}function d(t){if(t){var n=t[w];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,e=function n(){for(;++r<t.length;)if(m.call(t,r))return n.value=t[r],n.done=!1,n;return n.value=g,n.done=!0,n};return e.next=e}}return{next:y}}function y(){return{value:g,done:!0}}var g,b=Object.prototype,m=b.hasOwnProperty,x="function"==typeof Symbol?Symbol:{},w=x.iterator||"@@iterator",S=x.asyncIterator||"@@asyncIterator",_=x.toStringTag||"@@toStringTag",O="object"==typeof t,E=n.regeneratorRuntime;if(E)return void(O&&(t.exports=E));E=n.regeneratorRuntime=O?t.exports:{},E.wrap=e;var P="suspendedStart",j="suspendedYield",F="executing",M="completed",A={},N={};N[w]=function(){return this};var T=Object.getPrototypeOf,I=T&&T(T(d([])));I&&I!==b&&m.call(I,w)&&(N=I);var k=c.prototype=o.prototype=Object.create(N);u.prototype=k.constructor=c,c.constructor=u,c[_]=u.displayName="GeneratorFunction",E.isGeneratorFunction=function(t){var n="function"==typeof t&&t.constructor;return!!n&&(n===u||"GeneratorFunction"===(n.displayName||n.name))},E.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,c):(t.__proto__=c,_ in t||(t[_]="GeneratorFunction")),t.prototype=Object.create(k),t},E.awrap=function(t){return{__await:t}},f(a.prototype),a.prototype[S]=function(){return this},E.AsyncIterator=a,E.async=function(t,n,r,i){var o=new a(e(t,n,r,i));return E.isGeneratorFunction(n)?o:o.next().then(function(t){return t.done?t.value:o.next()})},f(k),k[_]="Generator",k.toString=function(){return"[object Generator]"},E.keys=function(t){var n=[];for(var r in t)n.push(r);return n.reverse(),function r(){for(;n.length;){var e=n.pop();if(e in t)return r.value=e,r.done=!1,r}return r.done=!0,r}},E.values=d,p.prototype={constructor:p,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=g,this.done=!1,this.delegate=null,this.method="next",this.arg=g,this.tryEntries.forEach(v),!t)for(var n in this)"t"===n.charAt(0)&&m.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=g)},stop:function(){this.done=!0;var t=this.tryEntries[0],n=t.completion;if("throw"===n.type)throw n.arg;return this.rval},dispatchException:function(t){function n(n,e){return o.type="throw",o.arg=t,r.next=n,e&&(r.method="next",r.arg=g),!!e}if(this.done)throw t;for(var r=this,e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e],o=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var u=m.call(i,"catchLoc"),c=m.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(t,n){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.tryLoc<=this.prev&&m.call(e,"finallyLoc")&&this.prev<e.finallyLoc){var i=e;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=n&&n<=i.finallyLoc&&(i=null);var o=i?i.completion:{};return o.type=t,o.arg=n,i?(this.method="next",this.next=i.finallyLoc,A):this.complete(o)},complete:function(t,n){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&n&&(this.next=n),A},finish:function(t){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),v(r),A}},catch:function(t){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r.tryLoc===t){var e=r.completion;if("throw"===e.type){var i=e.arg;v(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:d(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=g),A}}}("object"==typeof n?n:"object"==typeof window?window:"object"==typeof self?self:this)}).call(n,function(){return this}(),r(158))}])</script><script src="/./main.0cf68a.js"></script><script>!function(){!function(e){var t=document.createElement("script");document.getElementsByTagName("body")[0].appendChild(t),t.setAttribute("src",e)}("/slider.e37972.js")}()</script>


    
<div class="tools-col" q-class="show:isShow,hide:isShow|isFalse" q-on="click:stop(e)">
  <div class="tools-nav header-menu">
    
    
      
      
      
    
      
    
      
      
      
    
    

    <ul style="width: 70%">
    
    
      
      <li style="width: 50%" q-on="click: openSlider(e, 'innerArchive')"><a href="javascript:void(0)" q-class="active:innerArchive">所有文章</a></li>
      
        
      
        
      
      <li style="width: 50%" q-on="click: openSlider(e, 'aboutme')"><a href="javascript:void(0)" q-class="active:aboutme">关于我</a></li>
      
        
    </ul>
  </div>
  <div class="tools-wrap">
    
    	<section class="tools-section tools-section-all" q-show="innerArchive">
        <div class="search-wrap">
          <input class="search-ipt" q-model="search" type="text" placeholder="find something…">
          <i class="icon-search icon" q-show="search|isEmptyStr"></i>
          <i class="icon-close icon" q-show="search|isNotEmptyStr" q-on="click:clearChose(e)"></i>
        </div>
        <div class="widget tagcloud search-tag">
          <p class="search-tag-wording">tag:</p>
          <label class="search-switch">
            <input type="checkbox" q-on="click:toggleTag(e)" q-attr="checked:showTags">
          </label>
          <ul class="article-tag-list" q-show="showTags">
            
            <div class="clearfix"></div>
          </ul>
        </div>
        <ul class="search-ul">
          <p q-show="jsonFail" style="padding: 20px; font-size: 12px;">
            缺失模块。<br/>1、请确保node版本大于6.2<br/>2、在博客根目录（注意不是yilia根目录）执行以下命令：<br/> npm i hexo-generator-json-content --save<br/><br/>
            3、在根目录_config.yml里添加配置：
<pre style="font-size: 12px;" q-show="jsonFail">
  jsonContent:
    meta: false
    pages: false
    posts:
      title: true
      date: true
      path: true
      text: false
      raw: false
      content: false
      slug: false
      updated: false
      comments: false
      link: false
      permalink: false
      excerpt: false
      categories: false
      tags: true
</pre>
          </p>
          <li class="search-li" q-repeat="items" q-show="isShow">
            <a q-attr="href:path|urlformat" class="search-title"><i class="icon-quo-left icon"></i><span q-text="title"></span></a>
            <p class="search-time">
              <i class="icon-calendar icon"></i>
              <span q-text="date|dateformat"></span>
            </p>
            <p class="search-tag">
              <i class="icon-price-tags icon"></i>
              <span q-repeat="tags" q-on="click:choseTag(e, name)" q-text="name|tagformat"></span>
            </p>
          </li>
        </ul>
    	</section>
    

    

    
    	<section class="tools-section tools-section-me" q-show="aboutme">
  	  	
  	  		<div class="aboutme-wrap" id="js-aboutme">张好好 &lt;br&gt; 视觉激光SLAM混血 &lt;br&gt; 邮箱：haohaoalt@163.com</div>
  	  	
    	</section>
    
  </div>
  
</div>
    <!-- Root element of PhotoSwipe. Must have class pswp. -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">

    <!-- Background of PhotoSwipe. 
         It's a separate element as animating opacity is faster than rgba(). -->
    <div class="pswp__bg"></div>

    <!-- Slides wrapper with overflow:hidden. -->
    <div class="pswp__scroll-wrap">

        <!-- Container that holds slides. 
            PhotoSwipe keeps only 3 of them in the DOM to save memory.
            Don't modify these 3 pswp__item elements, data is added later on. -->
        <div class="pswp__container">
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
        </div>

        <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
        <div class="pswp__ui pswp__ui--hidden">

            <div class="pswp__top-bar">

                <!--  Controls are self-explanatory. Order can be changed. -->

                <div class="pswp__counter"></div>

                <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>

                <button class="pswp__button pswp__button--share" style="display:none" title="Share"></button>

                <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>

                <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>

                <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
                <!-- element will get class pswp__preloader--active when preloader is running -->
                <div class="pswp__preloader">
                    <div class="pswp__preloader__icn">
                      <div class="pswp__preloader__cut">
                        <div class="pswp__preloader__donut"></div>
                      </div>
                    </div>
                </div>
            </div>

            <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
                <div class="pswp__share-tooltip"></div> 
            </div>

            <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
            </button>

            <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
            </button>

            <div class="pswp__caption">
                <div class="pswp__caption__center"></div>
            </div>

        </div>

    </div>

</div>
  </div>
</body>
</html>